Java正则表达式的搜索和替换
这段代码有什么问题?Java正则表达式的搜索和替换
public int convert(String param){
System.out.println(param); // OUTPUT1
if(param=="NUM1"){
return 10;
}else if(param=="NUM2"){
return 20;
}else
return 0;
}
return param;
}
String Formula="[NUM1]+[NUM2]";
Formula = Formula.replaceAll("\\[(.*?)\\]", convert("$1"));
System.out.println(Formula); // OUTPUT2
//OUTPUT1 - $1
//OUTPUT2 - 0+0
我希望OUTPUT1为(NUM1或NUM2),OUTPUT2为“10 + 20”。
在Java中,不能只使用"$1"
来引用诸如脚本语言之类的匹配表达式的部分。而是使用捕获组。
您应该先阅读javadoc的Pattern。
不是最好的东西:
String line = "[NUM1]+[NUM2]";
Pattern p = Pattern.compile("\\[(.*?)\\]");
Matcher m = p.matcher(line);
while(m.find()) {
String token = m.group(1);
String newValue = convert(token);
line = line.replaceAll(token, newValue);
}
感谢您的回答。你能指导我解决问题吗? – Jaynova 2012-07-12 18:55:03
添加代码。对不起,早些时候很短。 – 2012-07-12 20:52:34
Java不是一种功能语言(然而,v8可能会改变它们)。看起来你所要做的是将一个回调函数传递给replaceAll,但这在Java中不起作用。
您需要做的不是使用replaceAll,而是使用匹配器并获取所有的令牌,然后循环遍历它们并在每个令牌上调用convert(),并将其添加回字符串中。它更麻烦,但它是唯一的方法去如果你想自己构建它。
感谢您的回答。你能指导我解决问题吗? – Jaynova 2012-07-12 18:53:53
@Gorets 19个问题有4个接受14个回答1接受和65代表。我认为你无权发表这样的言论。 – 2012-07-12 18:45:02
感谢您的回答。你能指导我解决问题吗? – Jaynova 2012-07-12 18:54:37