2015-10-13 18 views
5

私はこの文字列をテキストファイルから取り込んでいます。Javaでの.split()の動作が混乱しています

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

1, normal, 1, o, 21, 17, t, 3を文字列配列に入れたいと思います。

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]); 
    } 

出力:

1 
normal 
1 

o 
21 


o 
17 


t 
3 

なぜ配列に格納されている空間が存在します。ここで例えば

答えて

0

:それは、単一のスペースと一致する最初のステップで

1 [(o 
  1. 次のステップは、それはこれらの二つのマッチングの間[(

ので一致して、空の文字列「」が返されます。

6

これは空白ではなく、空の文字列です。あなたの文字列は次のとおりです。

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

それはあなたの正規表現に応じて次のように分かれていますが:

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

隣接する二つの区切り文字が表示され、それらの間の空の文字列トークンがあることと考えています。

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

したがって"()[,]"隣接する任意の数の文字が区切り文字と見なされます:あなたはこのように、例えば、あなたの正規表現を変更することがあり、この問題を解決するには

関連する問題