【问题标题】:Java regular expression search and replace [closed]Java正则表达式搜索和替换[关闭]
【发布时间】:2012-07-12 14:09:26
【问题描述】:

这段代码有什么问题?

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

【问题讨论】:

  • @Gorets 19 个问题,4 个接受,14 个答案,1 个接受,65 个代表。我认为你没有资格发表那样的言论。
  • 感谢您的回答。你能指导我解决问题吗?

标签: java search replace


【解决方案1】:

在 Java 中,不能只使用 "$1" 来引用匹配表达式的部分,例如脚本语言。而是使用捕获组。

您应该首先阅读 Pattern 的 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);
}

【讨论】:

  • 感谢您的回答。你能指导我解决问题吗?
  • 添加了代码。抱歉之前做空了。
【解决方案2】:

Java 不是函数式语言(不过,v8 可能会更改添加它们)。看起来您要做的是将回调函数传递给replaceAll,但这在Java中不起作用。

您需要做的不是使用 replaceAll,而是使用 Matcher 并获取所有标记,然后遍历它们并在每个标记上调用 convert() 将其添加回字符串中。虽然麻烦很多,但如果您想自己构建它,这是唯一的方法。

【讨论】:

  • 感谢您的回答。你能指导我解决问题吗?
猜你喜欢
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 2018-05-25
  • 2010-11-25
  • 2010-10-30
  • 1970-01-01
相关资源
最近更新 更多