用HashMap中的键值替换文本中的字符串

时间:2014-09-08 09:25:09

标签: java regex hashmap

主要目标是将字符串中的某些单词替换为键的hashmap中的值(键是文本中的单词)。键的格式不同。 例如: 正文“Lookahead和lookbehind,统称为lookaround,是[0-23]断言” hashmap: {Lookahead = test1,lookbehind = test2,lookaround = test3,[0-23] = newvalue} 预期产量 “test1和test2,统称为test3,是新值断言”

我能够制作字典,但替换部分是我需要帮助的地方。我无法替换[0-23]类似的键。因为replaceAll不考虑 - ,[和]。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

mainText.replaceAll(java.util.regex.Pattern.quote(entry.getKey()), java.util.regex.Matcher.quoteReplacement(entry.getValue()))

java.util.regex.Pattern.quote的调用会逐字处理任何特殊的正则表达式字符。 替换字符串上的java.util.regex.Matcher.quoteReplacement调用对于具有一些特殊字符的替换字符串也是如此。

(几乎)所有方法都是Javadoc:

  

String java.lang.String.replaceAll(String regex,String replacement)

     

替换此字符串中与给定常规匹配的每个子字符串   表达式与给定的替换。调用此方法   str.replaceAll(regex,repl)形式的结果完全相同   作为表达   java.util.regex.Pattern.compile(正则表达式).matcher(STR).replaceAll(REPL)   请注意替换中的反斜杠()和美元符号($)   字符串可能会导致结果与正确的结果不同   被视为字面替换字符串;见Matcher.replaceAll。使用
  java.util.regex.Matcher.quoteReplacement压制特殊   如果需要,这些字符的含义。参数:正则表达式   要与此字符串匹配的正则表达式替换   要替换每个匹配的字符串返回:结果   String抛出:PatternSyntaxException - 如果正则表达式为#   语法无效,因为:      1.4参见:java.util.regex.Pattern @spec JSR-51