我有以下简单的代码:
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之间的额外空间来自哪里?
答案 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 = "[_,\\.]+";