当两个分隔符彼此相邻时拆分 Java 中的字符串
Splitting a string in Java when two delimiters are next to one another
在 java 中,我有一行被称为 str
的 BufferedReader
读入。我还有一个名为 splitStr
的 String[]
,它将包含拆分为任何非字母数字字符和字符 '
.
的字符串的内容
代码如下所示:
// 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 值在 A
和 z
之间的字符。
范围[A-z]
将select所有字符如上图所示。
在字符 class 和 space 字符上都使用 +
量词 。
str.split("[^a-zA-Z0-9']+|\s+");
^ ^
这将 select 尽可能多的匹配项。
str.split("[^a-zA-Z0-9']+")
那没用??
在 java 中,我有一行被称为 str
的 BufferedReader
读入。我还有一个名为 splitStr
的 String[]
,它将包含拆分为任何非字母数字字符和字符 '
.
代码如下所示:
// 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 值在 A
和 z
之间的字符。
范围[A-z]
将select所有字符如上图所示。
在字符 class 和 space 字符上都使用 +
量词 。
str.split("[^a-zA-Z0-9']+|\s+");
^ ^
这将 select 尽可能多的匹配项。
str.split("[^a-zA-Z0-9']+")
那没用??