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>,
,,
,…)