java用正则表达式拆分字符串

时间:2012-03-17 05:49:33

标签: java regex

我想通过将所有非字母设置为分隔符来分割字符串。

String[] word_list = line.split("[^a-zA-Z]");

但是有以下输入

  

11:11 Hello World

word_list在“hello”和“world”之前包含许多空字符串

请告诉我原因。谢谢。

3 个答案:

答案 0 :(得分:2)

这是您的字符串,其中每个^字符显示[^a-zA-Z]的匹配项:

11:11 Hello World
^^^^^^     ^

split方法找到每个匹配项,并基本返回^个字符之间的所有子字符串。由于在任何有用数据之前有六个匹配项,因此在获得字符串"Hello"之前最终会得到5个空子字符串。

为了防止这种情况,您可以手动过滤结果以忽略任何空字符串。

答案 1 :(得分:2)

因为您的正则表达式匹配每个单独的非alpha字符。这就像分开

",,,,,,Hello,World"

逗号。

您需要一个匹配整个非字母字符序列的表达式,例如:

line.split("[^a-zA-Z][^a-zA-Z]*")

我仍然认为你的示例会得到一个前导空字符串,因为如果逗号是你的分隔符就像分隔",Hello,World"一样。

答案 2 :(得分:0)

以下是否会这样做?

String[] word_list = line.replaceAll("[^a-zA-Z ]","").replaceAll(" +", " ").trim().split("[^a-zA-Z]");

我在这里做的是在进行拆分之前删除所有非字母字符,然后用一个空格替换多个空格。