String.split()意外返回""

Cav*_*n42 1 java regex string

我有一个简单的方法将字符串拆分为数组.它将它分成有非字母字符的地方.我现在使用的这条线如下:

String[] words = str.split("[^a-zA-Z]");
Run Code Online (Sandbox Code Playgroud)

所以这应该分割只有字母字符的字符串.但问题是,当它分裂时,它适用于某些,但不是全部.例如:

String str = "!!day--yaz!!";
String[] words = str.split("[^a-zA-Z]");
String result = "";

for (int i = 0; i < words.length; i++) {
    result += words[i] + "1 ";
}

return result;
Run Code Online (Sandbox Code Playgroud)

我在那里添加了1以查看拆分发生的位置,因为我在空值上遇到错误.无论如何,当我运行此代码时,我得到一个输出:

1 1 day1 1 yaz1
Run Code Online (Sandbox Code Playgroud)

为什么它会在前两个之间分开,在之后的一个之后,而不是在最后两个之后!为什么它甚至在那里分裂?任何有关这方面的帮助都会很棒!

Jen*_*der 5

它在分割匹配之前或之后不分裂,因此在破折号和刘海之间得到一个空字符串.

这不适用于尾随的刘海,因为如javadoc中所述,省略了尾随的空字符串

因此,结尾的空字符串不包含在结果数组中.