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