对于#34; [,,。\\ s]"正则表达式为Split String效果不佳在Java中

时间:2014-08-09 11:38:21

标签: java regex string split

我希望通过","将字符串拆分成组。或","(中文逗号)或"。"或任何空白字符(如空格或" \ n")。

我是regex的新手。 我写下面的测试用例:

    String str2="word1 , word2,,word3.word4 word5";
    String[] formated=str2.split("[,,.\\s]");
    for(int i=0;i<formated.length;i++){
        System.out.println("i="+i+ "   "+formated[i]);
    }

输出结果是:

i=0   word1
i=1   
i=2   
i=3   word2
i=4   
i=5   word3
i=6   word4
i=7   word5

当标志汇集在一起​​时为什么不起作用?当像&#34; ,,&#34;这样的东西聚集在一起时,我应该做些什么才能让它成为一个完整的标志?

2 个答案:

答案 0 :(得分:4)

你可以试试。您需要添加+以匹配一个或多个。

[,,.\s]+

这是demo


Quantifiers

量词可让您指定匹配的 number of occurrences 。如果您使用x+,则模式会尝试尽可能多地匹配x

word1 , word2,,word3.word4 word5
     ^^^------All three characters are matched at a time

word1 , word2,,word3.word4 word5
             ^^------both characters are matched at a time

如果您不使用+,则只使用单个字符来分割字符串。

enter image description here

答案 1 :(得分:3)

使用以下regExpsplit,因为它允许您从[]

中指定的一个或多个字符中拆分
[,,.\\s]+
  • []在括号列表中匹配来自String任何单个字符
  • +匹配一个或多个匹配项。

如果没有+,它就会像这样溢出

word1 , word2,,word3.word4 word5
     ^^^     ^^^     ^     ^
     123     456     7     8

因此,您在分割后会有8 String,但是当您添加plus时,它会将123456统计为单个,因为现在您的regExp能够匹配一个或多个字符出现。