我有一个由制表符和空格以及一些任意字符组成的字符串。下面的字符串由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
匹配。
我错过了什么?
答案 0 :(得分:2)
如果在分割字符串时,字符串的第一个字符在分隔符中,则生成的数组的第一个元素始终为empty string
。
这样,你的字符串总是以empty string
开头。因此,您的分隔符 - \s+
将分为两部分" a"
字符串(请注意前导空格),首先是\s+
之前的空字符串 {{1 }和之后的一个,""
。
所以,你得到的输出很明显。
事实证明,第一个元素只是“空白”(s [0] .equals(“”) 返回true)所以它应该与\ s匹配。
不,不应该。空格不是空字符串。它们之间存在差异。