0

我有一个由制表符和空格以及一些任意字符组成的字符串。下面的字符串由 组成space space tab tab 1 space tab -2 tab space + space

import java.util.Arrays;

String[] s = "          1   -2   + ".split("[\\s]+");
System.out.println(Arrays.toString(s));

使用正则表达式运行 split[\s+]期望得到[1, -2, +],但是我在我的机器(OS X,JDK1.6.0_37)上得到的返回数组是[, 1, -2, +].

事实证明,第一个元素只是“空白”(s[0].equals("")returns true),所以它应该被匹配\s

我错过了什么?

4

1 回答 1

2

如果在拆分字符串时,字符串的第一个字符在分隔符中,则生成的数组的第一个元素始终是empty string.

采取这种方式,你的字符串总是以empty string. 因此,您的分隔符 -\s+" a"字符串(注意前导空格)分为两部分,第一部分之前\s+空字符串 "",之后是a.

所以,你得到的输出是显而易见的。

事实证明,第一个元素只是“空白”(s[0].equals("") 返回 true),因此它应该与 \s 匹配。

不,它不应该是。空格不是空字符串。它们之间是有区别的。

于 2013-01-30T23:26:00.580 回答