string.split(“\\S”) 如何工作
我正在从Ganesh和Sharma的oracle_certified_professional_java_se_7_programmer_exams_1z0-804_and_1z0-805一书中提出一个问题。
一个问题是:
请考虑以下程序并预测输出:
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); } }
a) 0
b) 5
c) 12
d) 16
现在我明白\S是一个正则表达式,意思是将非空格字符视为分隔符。但是我对正则表达式如何进行匹配以及拆分产生的实际令牌感到困惑。
我添加了代码来打印令牌,如下所示
for (String str: tokens){
System.out.println("<" + str + ">");
}
我得到了以下输出
16
<>
< >
<>
< >
<>
<>
<>
<>
<>
<>
<>
<>
< >
<>
<>
< >
所以很多空字符串标记。我只是不明白这一点。
我本来会这样想,如果分隔符是非空格字符,那么在上面的文本中,所有字母字符都用作分隔符,所以如果我们匹配的标记也会导致空字符串,那么也许应该有21个标记。我只是不明白Java的正则表达式引擎是如何解决这个问题的。是否有任何正则表达式大师可以为我阐明此代码?