StringTokenizer immer nur ein Zeichen

XanderFlash

Mitglied
hallo alle zusammen,

kann man einem StringTokenizer sagen, dass man immer nur ein einziges zeichen haben will
das dann in ein array speichern und dann zum nächsten zeichen
ich habe eine matrix, die aber keine leerzeichen zwischen den zahlen hat.

ein streamtokenizer kommt nicht in frage, weil die matrix in einer txt datei ist, die noch andere sachen enthalten und schon anders ausgelesen werden

mfg X
 
verwandle einen String mit toCharArray() in viele chars, oder verwende substring(i,i+1) für Strings,

mache das direkt mit dem Ursprungsstring,
oder wenn du den Tokenizer dennoch brauchst und der lange Token liefert, dann zerstückel diese Strings auf ähnliche Weise
 
ich habe es jetzt so gemacht, aber er meckert was rum in die richtung nullpointerexeption bei "s.toCharArray()"
Java:
int x = 0;
for (int j = 24; j <= 34; j++){
         String s = array[j]; // j = 24  ==>  2220110222
		char [] c = s.toCharArray();
			for (int y = 0; y > c.length; y++){
			     zellem[x][y] = (int)c[y];
				}
				x++;
}
 
wie ist array gefüllt und von welchem Typ ist es?
Mal davon abgesehn ist deine zweite Schleifenbedingung nicht sehr sinnvoll.
 
das array ist mit string gefüllt
die test zeichenkette ist dann : 2220110222

diese soll zerlegt werden in die einzelnen ziffern und dann nacheinander in die arrays "zellem[][]" als integer gespeichert werden.
sodass das hier heraus kommt:

zellem[0][0] = 2
zellem[0][1] = 2
zellem[0][2] = 2
zellem[0][3] = 0

usw...
 
> das array ist mit string gefüllt
> die test zeichenkette ist dann : 2220110222

was bedeuten diese Sätze? ein Array besteht aus vielen einzelnen Positionen, ob da wohl überall ein String drinsteht?
was hat eine einzelne Zeichenkette damit zu tun?
vielleicht kann man um die Ecke denken und vermuten, dass die zehn Zeichen von 2220110222 an zehn Stellen im Array stehen,
dann hast du ein Problem mit der Länge der Schleife:

for (int j = 24; j <= 34; j++){
führt zu j = 24, 25, 26, 27, 28, 29, 30, 31, 32, 33 und 34,
also elf verschiedene Indexe bei nur 10 gefüllten Arraystellen, das geht wohl schief
 
was liefert dir?
System.out.println(array[24]);

um dir bei deinem Problem zu helfen brauche wir die Deklaration aber noch viel wichtiger die Initialisierung deines Arrays array.
 
ich vereinfach das jetzt mal:

Java:
String s = "2220110222"

 // hier soll s aufgesplittet werden und in "int" umgewandelt werden

System.out.println(zellem[0][0]);  // soll den int wert 2 liefern
System.out.println(zellem[0][3]); // soll den int wert 0 liefern
 
ich vereinfach das jetzt mal:

Java:
String s = "2220110222"

 // hier soll s aufgesplittet werden und in "int" umgewandelt werden

System.out.println(zellem[0][0]);  // soll den int wert 2 liefern
System.out.println(zellem[0][3]); // soll den int wert 0 liefern
Lies dir dazu mal http://www.java-forum.org/java-basics-anfaenger-themen/95733-einzelne-ziffern-string.html durch 😉

Java:
final String quelle = "123432123";
final Pattern pattern = Pattern.compile("([0-9]{1})");
final Matcher matcher = pattern.matcher(quelle);
while (matcher.find()) {
    int i = Integer.parseInt(machter.group())
}
 
du brauchst es uns nicht vereinfachen. wir wissen, was du vorhast nur stolperst du auf dem Weg dorthin über eine NPE und das nicht umsonst... wir kennen leider deinen weg nicht und deshalb wird dir der Splitalgo von Firestorm auch nicht weiterhelfen, weil du über diese NPE wieder stolpern wirst!

um dir bei deinem Problem zu helfen brauche wir die Deklaration aber noch viel wichtiger die Initialisierung deines Arrays array.

Ich formuliere das mal anders:
du schreibst:
Java:
        String s = array[j]; // j = 24  ==>  2220110222
        char [] c = s.toCharArray(); // hier bekommst du die NPE

nachdem wir die Initialisierung von s sehen, kann es nur eine Nullzuweißung von array[j] sein. Irgendwo auf deinem "Weg" musst du dieses array ja erstmal instanziieren.

Das machst du mit:

Java:
String[] array = new String[x];

und irgendwann musst es es auch initialisieren
z.b.:

Java:
array[24] = "2220110222";

und genau das findet IMHO bei dir nicht statt! Aber leider kann ich dir das jetz auch net sicher sagen, weil du ja anstatt uns an deiner Initialisierung vom Array array teilhaben zu lassen uns den Code vereinfacht hast.

grüße
nrg
 

Zurück
Oben