在Java中使用非空白字符时,split方法是如何工作的?
我不明白String类中的在Java中使用非空白字符时,split方法是如何工作的?,java,arrays,regex,split,Java,Arrays,Regex,Split,我不明白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){
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,不仅是数组中出现的一个。
谢谢 以下是一种直观的方法,可以解释
split()
方法如何应用分隔符:
^x xx $
[ "" | " " | "" | " " ]
^ nothing ^ space ^ nothing ^ space ^
start 1st x 2nd x 3rd x end of string
这将导致您观察到的阵列输出:
["", " ", "", " "]
你应该问自己的问题是,在两个连续的分隔符之间有什么
x
时,提取的值是”
,因为前面的分隔符实际上是字符串的开头
x
时,提取的值是”
,因为前面的分隔符是第一个x
,而”
是介于两者之间的x
时,提取的值是“
,因为前面的分隔符也是前面的字符,所以没有要提取的内容字符串
的结尾时,提取的值是“”
,因为前面的分隔符是第三个x
,中间有一个空格所以结果确实是 你的逻辑是这样的 检查每个字符(如果是非空白字符),使其为空,否则放置相同的字符
String myX=“x xx”;
字符串[]x=新字符串[myX.length()];
char[]charArray=myX.toCharArray();
for(int i=0;i
给定代码的工作方式如下所示
x
剩下的一切:-“
x
第一个和第二个x之间的所有内容:-“”
x
第二个和第三个x之间的所有内容:-“”
x
作为最后一个元素所以结果是
[“”,“”,“”,“”,“”]
结果元素不是简单的0x1 x2x3
?为什么xx
会产生两个空字符串?你能说得更具体一点吗?将匹配项混合到数组中:[“”、“x”、“x”、“x”、“x”]
也就是说,“xx”
在左侧有一个空格,在x
s之间有一个空字符串,在右侧有一个空格。在您的逻辑中,您说它将生成两个连续的空字符串,但第二个字符串从何而来?该字符串中有3个非空白字符;它最多可以分成4个部分。但它是空白或非空白这一事实是不相关的-尝试交换x
和
左右,并使用“\\s”
作为分隔符-您将在输出中看到完全相同的模式。@AlexM。请注意,这与正则表达式或空格几乎没有(或根本没有)关系。如果按文本x
拆分,则得到相同的结果。
String myX = "x xx ";
String[] x = new String[myX.length()];
char[] charArray = myX.toCharArray();
for (int i = 0; i < charArray.length; i++) {
char c = charArray[i];
x[i] = !Character.isWhitespace(c) ? "" : String.valueOf(c);
}
for (String s : x){
System.out.print("\"" + s + "\", ");
}
System.out.print(x.length); // prints "", " ", "", "", " ", 5