String.split处理空格和制表符的奇怪行为

时间:2013-01-30 23:22:18

标签: java regex string

我有一个由制表符和空格以及一些任意字符组成的字符串。下面的字符串由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));

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

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

我错过了什么?

1 个答案:

答案 0 :(得分:2)

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

这样,你的字符串总是以empty string开头。因此,您的分隔符 - \s+将分为两部分" a"字符串(请注意前导空格),首先是\s+之前的空字符串 {{1 }和之后的一个,""

所以,你得到的输出很明显。

  

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

不,不应该。空格不是空字符串。它们之间存在差异。