我有以下方法,我希望分裂方法的正则表达式找到逗号字符(“,”)的所有实例,如果if前面没有字母“x”。
方法:
public void replaceTest3() {
String valueRaw = "onex,two,three,fourx,five";
String[] splittedString = valueRaw.split("[(.,)]&&[^x{1}+,]");
for (int i = 0; i < splittedString.length; i++) {
System.out.println(splittedString[i]);
}
}
所以我希望这个方法输出
onex,two
three
fourx,five
但是,正如当前正则表达式所示,后一部分排除前面带有“x”的所有逗号实例都不起作用 - 显然没有找到任何内容。我的错误在哪里,我怎么能实现我想做的事?
答案 0 :(得分:2)
查找逗号字符(“,”)的所有实例,如果不是 以字母“x”开头。
可以用这样的负面观察来完成:
(?<!x),
即:
valueRaw.split("(?<!x),");
答案 1 :(得分:0)
你的角色类是虚假的。特殊字符在字符类中失去意义。例如,[(.,)]&&[^x{1}+,]
匹配“(&&+", ")&&{
”,...
答案 2 :(得分:0)
如果您对更多代码没问题,这是一个没有后顾之处的解决方案:
private static final Pattern P = Pattern.compile( "[^x],|^," );
private static List<String> splitAtCommaNotPreceededByX( String valueRaw ) {
Matcher m = P.matcher( valueRaw );
List<String> parts = new ArrayList<String>();
int start = 0;
while(m.find()) {
parts.add( valueRaw.substring( start, m.end() - 1 ) );
start = m.end();
}
parts.add( valueRaw.substring( start ) );
return parts;
}