Java 如何替换字符串中的括号

Java 如何替换字符串中的括号,java,string,design-patterns,Java,String,Design Patterns,我有一个包含令牌的字符串列表。 代币是: {ARG:token_name} 我也有令牌的散列映射,其中key是令牌,value是我想要替换令牌的值 当我使用“replaceAll”方法时,我得到一个错误: java.util.regex.PatternSyntaxException:非法重复 我的代码是这样的: myStr.replaceAll(valueFromHashMap , "X"); valueFromHashMap包含{和} 我得到这个hashmap作为参数 在regexp上工作

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

{ARG:token_name}

我也有令牌的散列映射,其中key是令牌,value是我想要替换令牌的值

当我使用“replaceAll”方法时,我得到一个错误:

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

我的代码是这样的:

myStr.replaceAll(valueFromHashMap , "X"); 
valueFromHashMap包含{和}

我得到这个hashmap作为参数

在regexp上工作<代码>{n,m}在regexp中通常是重复的

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

因此,用
X
替换所有开口支架的方法如下:

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

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

replaceAll()
将正则表达式作为参数,并且
{
是正则表达式中的一个特殊字符。为了使正则表达式将其视为正则字符,它必须由一个
\
转义,而另一个
\
必须再次转义,Java才能接受它。因此,您必须像其他人所说的那样使用
\{

{是模式中使用的特殊字符(
}
)。 你必须避开它以避免任何混乱

手动转义这些字符可能是危险的(您可能会忽略其中一个,使您的模式完全错误)和乏味的(如果您有很多特殊字符)。 处理这个问题的最好方法是使用


相关问题:

资源:


您可以用
.replaceAll()
删除方括号中的花括号

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

例如:newString=“ARG:token\u name”

如果要进一步将新闻字符串与键和值分开,可以使用
.split()

String[]arrayString=newString.split(“:”)


使用arrayString,您可以将其用于HashMap,并使用
.put()
arrayString[0]
arrayString[1]

发布您的代码,这样我们就可以找出错误所在,因此我必须整理HashMap键,检测键是否包含{或},并在其前面添加斜杠?不,是
字符串。replaceAll()
方法使用正则表达式。这些正则表达式具有某种特殊字符(例如{和})。作为示例,
a{5,7}
表示“一行5到7个a”(aaaaa、aaaaaaa或aaaaaaaaa)。我希望您尝试类似于
myStr.replaceAll(“{”、“X”)
{
不是有效的正则表达式。因此,我的提示是:只需将
{
替换为
\{
,并将
\}
替换为
String.replaceAll()
的第一个参数中的
String.replaceAll()。我收到这个hashmap作为参数。我应该怎么做?替换hashmap中的所有项目?啊,现在我得到了,使用
myStr.replaceAll(Pattern.quote(valueFromHashMap),…)
。正如(至少)@Colin Hebert已经说过的:
Pattern.quote()
引用所有特殊字符(例如
{/code>,
,…)