当两个分隔符彼此相邻时拆分 Java 中的字符串

Splitting a string in Java when two delimiters are next to one another

在 java 中,我有一行被称为 strBufferedReader 读入。我还有一个名为 splitStrString[],它将包含拆分为任何非字母数字字符和字符 '.

的字符串的内容

代码如下所示:

// Assume str contains a line
String[] strSplit = str.split("[^a-zA-z0-9']|\s");

鉴于已分配给 str 的字符串 "Hello can't world, how are [you! (today)? " 我希望 strSplit 数组中包含以下内容:

strSplit = [ "Hello", "can't", "world", "how", "are", "you", "today" ]

但是,我最终在 strSplit 数组中得到了这个:

strSplit = [ "Hello", "can't", "world", "", "are", "[you", "", "today" ]

本质上,当拆分字符串 "world, " 时,它识别 world 部分和定界符 , 然后由于另一个定界符之前没有有效的字符串,它给了我一个空字符串 ""。同样由于某种原因,带括号 [] 的字符串将在拆分字符串中结束。

我假设这与我设置正则表达式的方式有关,但我不确定我做错了什么。我对正则表达式很陌生,所以任何帮助将不胜感激。

正则表达式的范围有误selection

[^a-zA-z0-9']|\s
       ^           This should be uppercase,

否则它将 select 所有 ASCII 值在 Az 之间的字符。

范围[A-z]将select所有字符如上图所示。

在字符 class 和 space 字符上都使用 + 量词

str.split("[^a-zA-Z0-9']+|\s+");
                        ^    ^

这将 select 尽可能多的匹配项。

Regex101 Live Demo

str.split("[^a-zA-Z0-9']+")

那没用??