java中如何替换中括号_关于Java:如何替换字符串中的括号

我有一个包含标记的字符串列表。

令牌是:

{ARG:token_name}.

我也有标记的哈希图,其中key是标记,value是我要用来替换标记的值。

当我使用" replaceAll"方法时,出现错误:

java.util.regex.PatternSyntaxException: Illegal repetition

我的代码是这样的:

myStr.replaceAll(valueFromHashMap ,"X");

并且valueFromHashMap包含{和}。

我将此哈希图作为参数。

发布您的代码,以便我们找出问题所在

String.replaceAll()适用于正则表达式。 {n,m}通常是正则表达式中的重复项。

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

因此,用X替换所有左括号的方式如下:

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

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

所以我将不得不迭代我的哈希映射键,检测键是否包含{或}并在其之前添加斜杠?

不,String.replaceAll()方法使用正则表达式。 这些正则表达式具有某种特殊字符(例如{和})。 作为示例,a{5,7}表示"连续5到7"(aaaaa,aaaaaa或aaaaaaa)。 我希望您尝试过类似myStr.replaceAll("{","X")的操作,但是{不是有效的正则表达式。 因此,我的提示是:只需在String.replaceAll()的第一个参数中将{替换为\\{,将}替换为\\}。

Johannes Wei,您是对的,我使用myStr.replaceAll(valuefromhashmap," X")并且valueFromHashMap是" {"。 我收到此哈希图作为参数。 我该怎么办? 替换哈希图中的所有项目?

啊,现在我明白了,使用myStr.replaceAll(Pattern.quote(valueFromHashMap), ...)。 正如(至少)@Colin Hebert已经说过的那样:Pattern.quote()引用所有特殊字符(例如{,},.等)

约翰内斯,谢谢

正如其他人已经说过的那样,{是模式中使用的特殊字符(}也是)。

您必须对其进行转义以避免任何混乱。

手动转义这些符号可能很危险(您可能会忽略其中一个,使您的模式完全错误),并且很繁琐(如果您有很多特殊字符)。

解决此问题的最佳方法是使用Pattern.quote()

相关问题:

如何转义方括号以进行模式编译

如何在Java中转义文本以进行正则表达式

资源:

Oracle.com-JavaSE教程-正则表达式

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。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值