Java正则表达式的搜索和替换

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”。

+2

@Gorets 19个问题有4个接受14个回答1接受和65代表。我认为你无权发表这样的言论。 – 2012-07-12 18:45:02

+0

感谢您的回答。你能指导我解决问题吗? – Jaynova 2012-07-12 18:54:37

在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); 
} 
+0

感谢您的回答。你能指导我解决问题吗? – Jaynova 2012-07-12 18:55:03

+0

添加代码。对不起,早些时候很短。 – 2012-07-12 20:52:34

Java不是一种功能语言(然而,v8可能会改变它们)。看起来你所要做的是将一个回调函数传递给replaceAll,但这在Java中不起作用。

您需要做的不是使用replaceAll,而是使用匹配器并获取所有的令牌,然后循环遍历它们并在每个令牌上调用convert(),并将其添加回字符串中。它更麻烦,但它是唯一的方法去如果你想自己构建它。

+0

感谢您的回答。你能指导我解决问题吗? – Jaynova 2012-07-12 18:53:53