小编Fra*_*nan的帖子

string.split("\\ S")如何工作

我在Ganesh和Sharma的书中提出了一个问题:oracle_certified_professional_java_se_7_programmer_exams_1z0-804_and_1z0-805.

一个问题是:

  1. 考虑以下程序并预测输出:

      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);
        }
      }
    
    Run Code Online (Sandbox Code Playgroud)

    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的正则表达式引擎如何解决这个问题.是否有任何正则表达的大师可以为我阐明这些代码?

java regex ocpjp

13
推荐指数
3
解决办法
4万
查看次数

标签 统计

java ×1

ocpjp ×1

regex ×1