如何替换字符串中的括号

我有一个包含令牌的字符串列表。
令牌是:

{ARG:TOKEN_NAME}。

我还有令牌的哈希映射,其中key是令牌,value是我想用令牌代替的值。

当我使用“replaceAll”方法时,我收到错误:

java.util.regex.PatternSyntaxException:非法重复

我的代码是这样的:

myStr.replaceAll(valueFromHashMap , "X"); 

和valueFromHashMap包含{和}。

我把这个hashmap作为参数。

正如其他人已经说过的那样, {是模式中使用的特殊字符( } )。 你必须逃避它以避免任何混淆。

手动转义这些可能是危险的(你可能会省略一个并使你的模式完全错误)和乏味(如果你有很多特殊字符)。 处理这个的最好方法是使用Pattern.quote()


相关问题:

  • 如何为模式编译转义方括号
  • 如何在Java中转义正则表达式的文本

资源:

  • Oracle.com – JavaSE教程 – 正则表达式

String.replaceAll()适用于String.replaceAll(){n,m}通常在regexp中重复。

如果要匹配文字括号,请尝试使用\\{\\}

因此,用X替换所有左括号都是这样的:

 myString.replaceAll("\\{", "X"); 

请参阅此处以了解正则表达式(regexps)以及为什么{}是使用regexp时必须转义的特殊字符。

replaceAll()将正则表达式作为参数, {是正则表达式中的特殊字符。 为了让正则表达式将其视为常规字符,它必须由\来转义,必须由另一个\再次转义,以便Java接受它。 所以你必须使用\\{

您可以使用带方括号的行中的.replaceAll()删除大括号

String newString = originalString.replaceAll("[{}]", "X")

例如:newString =“ARG:token_name”

如果你想进一步将newString分隔为键和值,你可以使用.split()

String[] arrayString = newString.split(":")

使用arrayString,您可以将它用于带有.put()arrayString[0]arrayString[1] HashMap