Sting.split() was mache ich falsch?

Status
Nicht offen für weitere Antworten.

raven

Bekanntes Mitglied
Code:
"message_all" könnte z.B. so aussehen ...
message_all = "100,150,200,310;120,170,210,110;"

Code:
String player_info[] = message_all.split(";");
for(int a = 0; a < player_info.length; a++) {
	String player_detail[] = player_info[a].split(",");
	int[] player_int = new int[player_detail.length];
	for(int b = 0; b < player_detail.length; b++) {
		player_int[b] = Integer.parseInt(player_detail[b]);
	}
	player.paint(g2d, player_int[0], player_int[1], player_int[2], player_int[3]);
}

ich bekomme aber bei diesem Code immer eine java.lang.NumberFormatException was ist daran falsch...
 
Hmmm...

Auf den ersten Blick sehe ich nichts falsches...

Las' dir mal bevor "Integer.parseInt()" die Strings auf die Konsole ausgeben. Möglicherweise sind da noch die Trennzeichen ("," & ";") drin. Wenn dem so ist, versuch mal diese zu entfernen.

mfg Spacerat
 
String player_info[] = client.message_all.split(";");
for(int a = 0; a < player_info.length; a++) {
String player_detail[] = player_info[a].split(",");
int[] player_int = new int[player_detail.length];
for(int b = 0; b < player_detail.length; b++) {
System.out.println(player_detail);
// player_int = Integer.parseInt(player_detail);
}
// player.paint(g2d, player_int[0], player_int[1], player_int[2], player_int[3]);
}

hab die jetzt ma ausgeben lassen, bevor ich parse... werden aber nur Zahlen ausgegeben...
 
Also bei mir läuft dieser Code durch:
Code:
public class T {
	public static void main( String[] args) throws Exception {
		String message_all = "100,150,200,310;120,170,210,110;";
		String player_info[] = message_all.split(";");
		for(int a = 0; a < player_info.length; a++) {
			System.out.println( "player_info[" + a + "]: <" + player_info[a] + ">");
			String player_detail[] = player_info[a].split(",");
			int[] player_int = new int[player_detail.length];
			for(int b = 0; b < player_detail.length; b++) {
				System.out.println( "player_detail[" + a + ";" + b + "]: <" + player_detail[b] + ">");
				player_int[b] = Integer.parseInt(player_detail[b]);
			}
		}
	}
}

Vielleicht liegt der Fehler doch woanders?
 
ja vllt hast du recht... die Exception wird ja am Anfang nur einmal geworfen...
und ich habe so eben beobachtet, das der String am Anfang kur so aussieht
Code:
100,150;210,110;

stattt so

Code:
100,150,200,310;120,170,210,110;

das könnte durchaus ein auslöser sein... oder nicht?
ich weiß aber noch nicht warum der am anfang 4 Zahlen weniger hat, wird wohl an de Netzwerkübertragung liegen, weil ich den String ja zuerst vom Server übermittelt bekomm...

Und noch ne Frage. Ist das schlimm, wenn am anfangn nur Einmal ein exception geworfen wird... udn danach nicht mehr...
Ich mein, es wäre doch schlimmer, wenn andauernd eine geworfen wird... weil es dadurch langsamer wird...
 
Tja...

Der obenstehende Code läuft mit deinen beiden Zahlenreihen und mit von mir getesteten. Allerdings: Die letzten Semikolons müssen Wech! sonst gibts zur Belohnung diese NumberFormatException für einen Leer-String. Zumindest lt. Quelltext:
Code:
// Relevante Auszüge aus Integer.parseInt()
// s ist das String-Argument
int result = 0;
boolean negative = false;
int i = 0, max = s.length();
int limit;
int multmin;
int digit;

if (max > 0) {
  //...String nach Integer...
} else {
  throw NumberFormatException.forInputString(s);
  //...Na das ist ja kein Wunder...
  //Ein Leer-String wird mit einer Leer-Exception beantwortet.
  //fröhliches Fehlersuchen... sag' ich mal.
}

Abhilfe: vor den beiden "for"-Schleifen und vorallem vor "Integer.parseInt()" auf Leer-String prüfen.

Fazit: Wir haben was gelernt! Und zwar, was eine NumberFormatException ohne weitere Ausgabe bedeutet. Gut zu wissen... :toll:

mfg Spacerat
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben