java - 在java中拆分字符串时出错

标签 java regex split string-split

我正在尝试根据一组特定的分隔符拆分字符串。
我的分隔符是:,"():;.!? 单个空格或多个空格。 这是我目前使用的代码,

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/

相关文章:

java - 如何跟踪仅给出类文件的 JVM 程序?

java - 在java中声明数组后分配给数组的字节数

删除十进制格式中多余的字符串字符

regex - 允许尾随和前导空格的正则表达式

php - 在 PHP 中,如何同时按空格、逗号和换行符拆分字符串

java - Apache Solr : Slave replicates 10+ times every time it polls (excessive commits? )

java - Eclipse:变量的调试和检查导致 com.sun.jdi.ObjectCollectedException

正则表达式上的 Python TypeError

java - 按 '- ' 拆分包含数字范围的字符串

r - 如何为非重复行创建唯一标识符?