Java正则表达式搜索和替换
这个代码有什么问题Java正则表达式搜索和替换,java,search,replace,Java,Search,Replace,这个代码有什么问题 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]+[
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还不是函数式语言,v8可能会更改并添加它们。看起来您试图做的是将回调函数传递给replaceAll,但这在Java中不起作用
您需要做的不是使用replaceAll,而是使用匹配器获取所有令牌,然后循环遍历它们,并对每个令牌调用convert将其添加回字符串中。这要麻烦得多,但如果您想自己构建它,这是唯一的方法。在Java中,不能只使用$1引用匹配表达式的部分,如脚本语言。而是使用捕获组 您应该从阅读javadoc开始 不是最好的事情:
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);
}
@Gorets 19个问题,4个被接受,14个答案,1个被接受,65个代表。我认为你们没有资格发表这样的评论。谢谢你们的回答。你能帮我解决一个问题吗?谢谢你的回答。你能帮我解决一个问题吗?谢谢你的回答。你能给我编一个解决问题的指南吗?增加了代码。对不起,我刚才缺钱。