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个代表。我认为你们没有资格发表这样的评论。谢谢你们的回答。你能帮我解决一个问题吗?谢谢你的回答。你能帮我解决一个问题吗?谢谢你的回答。你能给我编一个解决问题的指南吗?增加了代码。对不起,我刚才缺钱。