【问题标题】:Using .split() for multiple characters in Java在 Java 中使用 .split() 处理多个字符
【发布时间】:2017-04-13 09:49:29
【问题描述】:

我正在尝试将输入拆分为 ".,:;()[]"'\/!? " 字符并将单词添加到列表中。我试过.split("\\W+?").split("\\W"),但它们都返回列表中的空元素。

另外,我试过.split("\\W+"),它只返回不带任何特殊字符的单词(例如,如果输入单词之一是“C#”,它会在列表中写入“C” )。最后,我还尝试将上面的所有特殊字符放入.split() 方法:.split("\\.,:;\\(\\)\\[]\"'\\\\/!\\? "),但这根本没有拆分输入。有人可以建议吗?

【问题讨论】:

  • 您需要一个字符类 [] 并且您需要转义特殊字符(对于字符类而言,这与一般的正则表达式不同),因此:split("[.,:;()\\[\\]\"'\\\\/!? ]+")

标签: java string split


【解决方案1】:

split() 函数接受正则表达式。

这不是您要查找的正则表达式.split("\\.,:;\\(\\)\\[]\"'\\\\/!\\? ")

尝试创建一个类似[.,:;()\[\]'\\\/!\?\s"] 的字符类并添加+ 以匹配一个或多个出现。

我还建议将字符空间 更改为通用的 \s,后者会采用所有空间变化,例如 \t

如果您确定选择作为拆分器的字符列表,那么这应该是您正确拆分的正确 Java 字符串文字,正如 @Andreas 建议的那样:

.split("[.,:;()\\[\\]'\\\\\\/!\\?\\s\"]+")

顺便说一句:我发现了一个特别有用的 Eclipse 编辑器选项 escapes the string when you're pasting them into the quotes。转到Window/Preferences,在Java/Editor/Typing/ 下,选中Escape text when pasting into a string literal 旁边的框

【讨论】:

  • 无需在字符类中转义.()?
  • 为什么你有两次")?并且您应该展示如何将其作为 Java 字符串文字来执行,因为那里的转义变得更糟。
猜你喜欢
  • 2013-11-26
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
相关资源
最近更新 更多