我正在尝试根据一组特定的分隔符拆分字符串。
我的分隔符是:,"():;.!? 单个空格或多个空格。
这是我目前使用的代码,
String[] arrayOfWords= inputString.split("[\\s{2,}\\,\"\\(\\)\\:\\;\\.\\!\\?-]+");
这在大多数情况下工作正常,但当第一个单词被引号括起来时我遇到了问题。例如
String inputString = "\"Word\" some more text.";
给我这个输出
arrayOfWords[0] = ""
arrayOfWords[0] = "Word"
arrayOfWords[1] = "some"
arrayOfWords[2] = "more"
arrayOfWords[3] = "text"
我希望输出给我一个数组
arrayOfWords[0] = "Word"
arrayOfWords[1] = "some"
arrayOfWords[2] = "more"
arrayOfWords[3] = "text"
当在句子中间使用引号时,这段代码一直运行良好,我不确定它在开头时有什么问题。
编辑:我刚刚意识到当任何定界符用作字符串的第一个字符时我也遇到了同样的问题
最佳答案
不幸的是,您将无法仅使用 split
删除这个空的第一个元素。您可能应该从字符串中删除与定界符匹配的第一个元素并在其后拆分。此外,您的正则表达式似乎不正确,因为
- 通过在
[...]
中添加{2,}
,您可以生成{
2
、
和}
字符分隔符, - 您不需要转义其余的定界符(请注意,您不必转义
-
只是因为它位于字符类[]
的末尾所以他不能用作范围运算符)。
试试这个方法
String regexDelimiters = "[\\s,\"():;.!?\\-]+";
String inputString = "\"Word\" some more text.";
String[] arrayOfWords = inputString.replaceAll(
"^" + regexDelimiters,"").split(regexDelimiters);
for (String s : arrayOfWords)
System.out.println("'" + s + "'");
输出:
'Word'
'some'
'more'
'text'
关于java - 在java中拆分字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18818134/