2015-10-13 11 views
5

Ich habe diese Zeichenfolge, die ich aus einer Textdatei nehme.verwirrt wie .split() in Java funktioniert

"1 normal 1 [(o, 21) (o, 17) (t, 3)]" 

Ich möchte 1, normal, 1, o, 21, 17, t, 3 in einem String-Array nehmen.

Scanner inFile = new Scanner(new File("input.txt"); 
String input = inFile.nextLine(); 

String[] tokens = input.split(" |\\(|\\)|\\[\\(|\\, |\\]| \\("); 
    for(int i =0 ; i<tokens.length; ++i) 
    { 
     System.out.println(tokens[i]); 
    } 

Ausgang:

1 
normal 
1 

o 
21 


o 
17 


t 
3 

Warum gibt es Räume in dem Array gespeichert werden.

Antwort

0

Zum Beispiel hier:

1 [(o 
  1. Im ersten Schritt wird ein einzelnes Leerzeichen entspricht.
  2. Der nächste Schritt paßt es [(

also zwischen diesen beiden Matching, eine Lücke String "" zurückgegeben.

6

Das sind keine Leerzeichen, das sind leere Strings. Ihr String ist:

"1 normal 1 [(o, 21) (o, 17) (t, 3)]" 

Es ist in der folgenden Art und Weise aufgeteilt entsprechend Ihrer regexp:

Token = "1" 
Delimiter = " " 
Token = "normal" 
Delimiter = " " 
Token = "1" 
Delimiter = " " 
Token = "" <-- empty string 
Delimiter = "[(" 
Token = "o" 
... end so on 

Wenn zwei benachbarte Trennzeichen erscheinen, es ist der Ansicht, dass es eine leere Zeichenfolge Token zwischen ihnen.

dies beheben Sie regexp, zum Beispiel können sich ändern, wie folgt aus:

"[ \\(\\)\\[\\,\\]]+" 

So eine beliebige Anzahl von "()[,]" benachbarten Zeichen wird als Trennzeichen betrachtet werden.