我在 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); } }
一)0
b) 5
c) 12
d) 16
现在我明白 \S 是一个正则表达式意味着将非空格字符视为分隔符。但是我对正则表达式如何匹配以及拆分产生的实际标记感到困惑。
我添加了代码以打印出令牌,如下所示
for (String str: tokens){
System.out.println("<" + str + ">");
}
我得到以下输出
16
<>
< >
<>
< >
<>
<>
<>
<>
<>
<>
<>
<>
< >
<>
<>
< >
所以很多空字符串标记。我只是不明白这一点。
我本来会认为,如果分隔符是上述文本中的非空格字符,那么所有字母字符都用作分隔符,所以如果我们匹配也会导致空字符串的标记,那么可能应该有 21 个标记。我只是不明白 Java 的正则表达式引擎是如何解决这个问题的。是否有任何正则表达式专家可以为我阐明此代码?