[英]How exactly does String.split() method in Java work when regex is provided?
我正在准备OCPJP考试,我遇到了以下示例:
class Test {
public static void main(String args[]) {
String test = "I am preparing for OCPJP";
String[] tokens = test.split("\\S");
System.out.println(tokens.length);
}
}
这段代码打印16.我期待像no_of_characters + 1这样的东西。有人可以解释一下,split()方法在这种情况下实际上做了什么? 我只是不明白......
它在正则表达式引擎代表\\S
非空白字符的每个"\\\\S"
上分裂。
所以让我们尝试在非空格( \\S
)上拆分"xx"
。 由于此正则表达式可以用一个字符匹配允许在它们之间迭代,以纪念分裂的地方(我们将使用管道|
为该)。
'x'
非空白? YES,所以让我们将其标记| x
| x
' '
非空白? 不,所以我们保持原样 'x'
非空白? YES,所以让我们将其标记| |
| |
因此,我们需要在开始和结束时拆分我们的字符串,最初给出结果数组
["", " ", ""]
^ ^ - here we split
但是由于尾随空字符串被删除,结果将是
[""," "] <- result
,""] <- removed trailing empty string
所以split返回array ["", " "]
,它只包含两个元素。
BTW。 要关闭删除最后一个空字符串,您需要使用split(regex,limit)
和split(regex,limit)
负值,如split("\\\\S",-1)
。
现在让我们回到你的例子。 如果您的数据是分裂的每一个
I am preparing for OCPJP
| || ||||||||| ||| |||||
意思是
""|" "|""|" "|""|""|""|""|""|""|""|""|" "|""|""|" "|""|""|""|""|""
所以这代表了这个数组
[""," ",""," ","","","","","","","",""," ","",""," ","","","","",""]
但由于尾随空字符串""
被删除(如果它们的存在是由分裂引起的 - 更多信息在: 混淆String.split的输出 )
[""," ",""," ","","","","","","","",""," ","",""," ","","","","",""]
^^ ^^ ^^ ^^ ^^
你得到的结果数组只包含这部分:
[""," ",""," ","","","","","","","",""," ","",""," "]
这正好是16个元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.