使用正则表达式解析字符串后的额外空格

时间:2015-09-01 07:06:58

标签: java regex

我有以下简单的代码:

String d = "_|,|\\.";
String s1 = "b,_a_.";

Pattern p = Pattern.compile(d);
String[] ss = p.split(s1);
for (String str : ss){
     System.out.println(str.trim());
}

输出结果

b

a

b和a之间的额外空间来自哪里?

2 个答案:

答案 0 :(得分:3)

你没有多余的空间,你在结果数组中得到一个空元素,因为你的正则表达式匹配只有1个字符,当结尾的集合中有多个字符时,字符串是分成每个角色。

因此,您应该通过将整个表达式放入非捕获组(+),尽可能多地将字符类中的这些字符与(?:_|,|\\.)+(1个或更多)量词进行匹配,或 - 更好 - 使用字符类[_,.]+

String d = "(?:_|,|\\.)+"; // Or better: String d = "[_,.]+";
String s1 = "b,_a_.";
Pattern p = Pattern.compile(d);
String[] ss = p.split(s1);
for (String str : ss){
    System.out.println(str.trim());
}

请参阅IDEONE demo

答案 1 :(得分:1)

虽然我对自己感到困惑,但也许你想要的是将正则表达式改为

String d = "[_,\\.]+";