主要目标是将字符串中的某些单词替换为键的hashmap中的值(键是文本中的单词)。键的格式不同。 例如: 正文“Lookahead和lookbehind,统称为lookaround,是[0-23]断言” hashmap: {Lookahead = test1,lookbehind = test2,lookaround = test3,[0-23] = newvalue} 预期产量 “test1和test2,统称为test3,是新值断言”
我能够制作字典,但替换部分是我需要帮助的地方。我无法替换[0-23]类似的键。因为replaceAll不考虑 - ,[和]。
答案 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