在Java中,当两个分隔符相邻时拆分字符串

在Java中,当两个分隔符相邻时拆分字符串,java,regex,string,token,Java,Regex,String,Token,在java中,我有一行是由一个名为str的BufferedReader读入的。我还有一个名为splitStr的字符串[],它将包含字符串的内容,该字符串被拆分为非字母数字字符和字符' 代码如下所示: // Assume str contains a line String[] strSplit = str.split("[^a-zA-z0-9']|\\s"); 鉴于字符串Hello can't world,[you!today!怎么样?已分配给str,我希望strSplit数组中包含以下内容:

在java中,我有一行是由一个名为str的BufferedReader读入的。我还有一个名为splitStr的字符串[],它将包含字符串的内容,该字符串被拆分为非字母数字字符和字符'

代码如下所示:

// Assume str contains a line
String[] strSplit = str.split("[^a-zA-z0-9']|\\s");
鉴于字符串Hello can't world,[you!today!怎么样?已分配给str,我希望strSplit数组中包含以下内容:

但是,我最终在strSplit数组中得到了以下结果:

本质上,在拆分字符串世界时,它会识别世界部分和分隔符,然后由于在另一个分隔符之前没有有效字符串,它会给我一个空字符串。此外,出于某种原因,带方括号[]的字符串将在拆分字符串中结束


我假设这与我设置regex的方式有关,但我不确定我做错了什么。我对regex非常陌生,因此希望您能提供帮助。

regex的范围选择错误

[^a-zA-z0-9']|\\s
       ^           This should be uppercase,
否则,它将选择ASCII值介于A和z之间的所有字符

范围[A-z]将选择上图所示的所有字符

在字符类和空格字符上使用+量词

str.split("[^a-zA-Z0-9']+|\\s+");
                        ^    ^
这将选择尽可能多的匹配项


正则表达式的范围选择错误

[^a-zA-z0-9']|\\s
       ^           This should be uppercase,
否则,它将选择ASCII值介于A和z之间的所有字符

范围[A-z]将选择上图所示的所有字符

在字符类和空格字符上使用+量词

str.split("[^a-zA-Z0-9']+|\\s+");
                        ^    ^
这将选择尽可能多的匹配项

那没用


这不起作用???

谢谢!这适用于空格。知道为什么括号[]没有在最后一个字符串中去掉吗?谢谢!这适用于空格。知道为什么括号[]没有在最后一个字符串中去掉吗?顺便说一句,你不需要|\\s,[^a-zA-z0-9']包括它。@ndn我最初在没有|\\s的情况下尝试过它,但是它仍然给了我一个字符串,顺便说一句,您不需要|\\s,[^a-zA-z0-9']包括它。@ndn我最初在没有| \\s的情况下尝试过它,但它仍然给了我作为字符串的效果。这适用于除换行符以外的所有字符。我最初的错误是我使用了a-z而不是a-z。然而,我得到的是作为字符串的换行符。我也检查了换行符,这是我的输出。你好,你今天好吗s、 小写的z是问题所在。但是因为我手工编码了它,所以没有面对这个问题..嗯..我唯一的猜测是因为我在mac电脑上,我认为它有一个\r字符?但我肯定在任何空白换行符的地方都会得到一个。嗯,我也在mac电脑上。String str=Hello不能世界,怎么样\n\n[you!today?;这适用于除换行符以外的所有字符。我最初的错误是我使用了a-z而不是a-z。但是,我将换行符作为字符串。我也检查了换行符,这是我的输出。您好,今天过得怎么样?是的,小写的z是个问题。但是,因为我手工编码了它,所以我没有面对这个问题假设..嗯..我唯一的猜测是因为我在mac电脑上,我认为它有一个\r字符?但我肯定在任何空白换行符的位置都有一个。嗯,我也在mac电脑上。String str=Hello can't world,你好吗;
str.split("[^a-zA-Z0-9']+")