【发布时间】:2016-11-24 11:38:46
【问题描述】:
我不明白 String 类中的 split() 方法在使用 regex(非空白字符)时如何工作。我在互联网上找到了一些部分答案,但我仍然不明白。这是我的代码:
public class Test {
public static void main(String[] args) {
String myX = "x xx ";
String[] x = myX.split("\\S");
for (String s : x){
System.out.print("\"" + s + "\", ");
}
System.out.println(x.length);
}
}
我的逻辑如下:
第一个'x' 是非空格吗?是的,所以在数组中我们应该有""' ' 是非空格吗?不,所以在数组中我们应该有 " "
第二个'x' 是非空格吗?是的,所以在数组中我们应该有 ""
第三个'x' 是非空格吗?是的,所以在数组中我们应该有""
最后一个' ' 是非空格吗?不,所以在数组中我们应该有 " "
在我看来,数组应该是这样的:["", " ", "", "", " "]
为什么数组看起来像 ["", " ", "", " "] 并且长度为 4 而不是 5?中间是2x,不只出现数组中的一个。
谢谢!
【问题讨论】:
-
生成的元素不就是
0x1 x2x3吗?为什么xx会产生两个空字符串? -
你能说得具体点吗?
-
将匹配项混合到数组中:
[ "", "x", " ", "x", "", "x", " " ]即," xx "左边有一个空格,xs 之间有一个空字符串,右边有一个空格。在您的逻辑中,您说它会产生两个连续的空字符串,但是第二个来自哪里? -
该字符串中有 3 个非空白字符;它可以分成的大部分是 4。但它是空格还是非空格的事实无关紧要 - 尝试交换
x和_,并使用"\\s"作为分隔符 - 你会看到输出中的相同模式。 -
@AlexM。请注意,这与正则表达式或空格几乎没有关系(或没有关系)。如果你用文字
x分割,你会得到相同的结果。