我正在准备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()方法实际上是做什么的?我只是不明白..。
发布于 2014-03-08 04:17:26
它在正则表达式引擎中代表\S非空格字符的每个"\\S"上拆分。
因此,让我们尝试在非空格(\S)上拆分"x x"。因为这个正则表达式可以由一个字符匹配,所以让我们迭代它们来标记拆分的位置(我们将使用管道|来实现)。
'x'非空格?是的,那么让我们将其标记为| x' '非空格?不是,所以我们把它保留为'x'非空格?是的,所以让我们将其标记为| |因此,我们需要在开头和结尾拆分字符串,这最初会给出结果数组
["", " ", ""]
^ ^ - here we split但由于删除了尾随的空字符串,因此结果将为
[""," "] <- result
,""] <- removed trailing empty string所以split返回数组["", " "],它只包含两个元素。
顺便说一句。要关闭删除最后一个空字符串的功能,您需要像split("\\S",-1)一样使用带有负值limit的split(regex,limit)。
现在让我们回到您的示例。如果您的数据被拆分到每个
I am preparing for OCPJP
| || ||||||||| ||| |||||这意味着
""|" "|""|" "|""|""|""|""|""|""|""|""|" "|""|""|" "|""|""|""|""|""所以这表示这个数组
[""," ",""," ","","","","","","","",""," ","",""," ","","","","",""] 但由于尾随的空字符串被删除(如果它们的存在是由Confusing output from String.split上的"" - more信息引起的)
[""," ",""," ","","","","","","","",""," ","",""," ","","","","",""]
^^ ^^ ^^ ^^ ^^您将获得结果数组,其中只包含此部分:
[""," ",""," ","","","","","","","",""," ","",""," "] 恰好是16个元素。
https://stackoverflow.com/questions/22259733
复制相似问题