[英]String.split's weird behaviour dealing with spaces and tabs
我有一个由制表符和空格以及一些任意字符组成的字符串。 下面的字符串由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
匹配。
我错过了什么?
如果在拆分字符串时,字符串的第一个字符在分隔符中,则生成的数组的第一个元素始终为empty string
。
这样,你的字符串总是以empty string
开头。 所以,你的分隔符 - \\s+
将分为两个部分中的" a"
字符串(注意前导空格),首先是在\\s+
之前是空字符串 ""
,而在它之后是a
,它是a
。
所以,你得到的输出是显而易见的。
事实证明,第一个元素只是“空白”(s [0] .equals(“”)返回true)所以它应该被\\ s匹配。
不,不应该。 空格不是空字符串。 他们之间有区别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.