混淆.split()如何在Java中工作

时间:2015-10-13 08:28:36

标签: java regex string 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

为什么数组中存储了空格。

2 个答案:

答案 0 :(得分:6)

那不是空格,那是空字符串。你的字符串是:

words=( $sentence )
echo ${#words[@]}

根据你的正则表达式,它按照以下方式分开:

"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

因此,任何数量的"[ \\(\\)\\[\\,\\]]+" 个相邻字符都将被视为分隔符。

答案 1 :(得分:0)

例如:

1 [(o
  1. 第一步,它匹配一个空格。
  2. 下一步与[(
  3. 相匹配

    因此,在这两个匹配之间,返回一个void String“”。