# String.split() funktioniert nicht richtig



## aptem (16. Sep 2011)

Hallo zusammen,

ich werde hier allmählich verrückt! 

Folgendes Problem:

Ich habe mir eine Textdatei erstellt in der Koordinaten von Zeichen abgespeichert werden.




A=255,,19,,12,,14;
B=272,,19,,12,,14;
C=288,,19,,11,,14;
D=0,,38,,12,,14;
...
...

Jetzt lese ich aus dieser Datei die Koordinaten und die Größen der Zeichen aus.


```
int[] result = new int[127];
        
        for(int i = 33; i < 127;i++) {
            if(fileContent.contains((char)i+"=")) {
                String s1 = fileContent.substring(fileContent.indexOf(i)+2, fileContent.indexOf(";", fileContent.indexOf(i)));
                String[] s2 = s1.split(",,");
                System.out.println((char)i);
                result[i] = Integer.parseInt(s2[0]);
            }
        }
        
return result;
```

Das funktioniert Anfangs auch, aber bei dem Zeichen "0" bekomm ich folgende Fehlermeldung:


```
Exception in thread "main" java.lang.NumberFormatException: For input string: ",4"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:481)
```

Das heißt ja, das ich bei der x-Koordinate irgendwie ein Komma zu viel hab.


Jetzt kommts..., die x-Koordinate hat noch nicht mal den Wert 4 und ein Komma hab ich da auch nicht zu viel. :lol::lol::lol:

siehe Beweis

```
0=272,,0,,11,,14;
```
Ich hab jetzt alles mögliche ausprobiert, aber es will nicht funktionieren, ich hoffe ihr könnt mir helfen.


----------



## r.w. (16. Sep 2011)

Hallo aptem,

in Deiner Zeile 4 suchst Du nach der Zeichenkette    (char)i + "="

In Zeile 5 jedoch bestimmst Du die Position des Zeichens (char)i ohne dem "="-Zeichen.
Die 0 wird aber mehrmals in Deiner Datei vorkommen, als nur am Zeilenanfang der gesuchten
Zeile. 

Wenn Du mal in Deiner Datei nach der ersten 0 suchst, wird garantiert 2 Zeichen danach
die Zeichenfolge ",4" zu finden sein.

Abgesehen davon würde ich mir ggf. noch einmal überlegen, ob man den Aufbau der Textdatei 
nicht besser gestalten kann.

VG ROlf


----------



## bERt0r (16. Sep 2011)

Das liegt an deiner merkwürdigen weise, wie du deine Datei abarbeitest (mit den ganzen indexof Aufrufen).

```
fileContent.substring(fileContent.indexOf(i)+2, fileContent.indexOf(";", fileContent.indexOf(i)));
```
fileContent.indexOf(i) sucht dir in deinem Fehlerfall die erste 0 in deiner Datei. Die ist wahrscheinlich nicht da, wo 0=272,,0,,11,,14; steht.
Warum liest du deine Datei nicht zeilenweise mit einem BufferedReader und readLine ein?


----------



## Bonsai (16. Sep 2011)

seh ich genauso wir bERtOr.
Erst das Dokument Zeilenweise auslesen und dabei kannst dann jede Zeile bei z.B. erst die ersten zwei zeichen von jeder Zeile wegschneiden(sofern das Konstant bleibt) und anschließend jeweils bei ",," splitten lassen.


----------



## aptem (16. Sep 2011)

Danke für die Hinweise, habe es jetzt gelöst und der Code sieht jetzt auch einigermaßen schick aus.


```
int[][] result = new int[127][4];
        
        for(int i = 33;i<127;i++) {
            if(fileContent.contains((char)i+"=")) {
                int start = fileContent.indexOf((char)i+"=")+2;
                int end = fileContent.indexOf(";", start);
                String s = fileContent.substring(start, end);
                String[] ss = s.split(",");
                result[i][0] = Integer.parseInt(ss[0]);
                result[i][1] = Integer.parseInt(ss[1]);
                result[i][2] = Integer.parseInt(ss[2]);
                result[i][3] = Integer.parseInt(ss[3]);
            }
        }
        
return result;
```


----------

