java split - 空间问题

1 java regex

 String[] t = a.slowa("a. R; er,  we p.");
   for (String w : t)
    System.out.println(w);
  }
 //...
  public String[] slowa(String s) {
   return s.split(" |\\.|,|\\;");
  }
Run Code Online (Sandbox Code Playgroud)

输出:

a

R

er


we
p
Run Code Online (Sandbox Code Playgroud)

为什么空间是新世界?

T.J*_*der 7

你已经告诉String#split函数拆分空格逗号分号.这就是它的成就:

"a. R; er,  we p."
  ^^ ^^  ^^^  ^ ^
  || ||  |||  | |
  || ||  |||  | +--Split here
  || ||  |||  +----And here
  || ||  ||+-------And here
  || ||  |+--------And here
  || ||  +---------And here
  || |+------------And here
  || +-------------And here
  |+---------------And here
  +----------------And here
Run Code Online (Sandbox Code Playgroud)

...因为你使用了没有量词的交替.你想要的是分开任何这些:

return s.split("[ .,;]+");
Run Code Online (Sandbox Code Playgroud)

它使用一个字符class([...])和一个quanitifier(+),以便连续多个被视为一个匹配.您也可以使用交替+量词(您必须将交替包装在非捕获组中"(?: |\\.|,|\\;)+"):但是使用字符类更清晰.