Android Studio中Java String replaceAll()含{}报错的解决方法问询
解决Java中replaceAll替换含{}字符串时的「Dangling metacharacter」错误
嘿,这个问题我之前也碰到过!原因很简单:replaceAll()方法的第一个参数是正则表达式,而{是正则里的特殊元字符,用来定义重复次数(比如a{3}表示匹配3个连续的a),直接写{Player1}的话,正则引擎会把{当成语法的一部分,找不到对应的闭合},就会抛出「Dangling metacharacter」这个错误。
下面给你三种靠谱的解决办法:
方法一:用
Pattern.quote()转义目标字符串
这个方法会自动把所有正则特殊字符转换成字面量,让正则引擎把它们当作普通字符串处理:import java.util.regex.Pattern; String card = cards.get(count).getCard(); if (card.contains("{Player1}")) { String replacedCard = card.replaceAll(Pattern.quote("{Player1}"), "Poep"); }方法二:手动转义正则特殊字符
在正则里,{需要用\转义,而Java字符串中\本身要写成\\,所以我们需要把{和}都转义:String card = cards.get(count).getCard(); if (card.contains("{Player1}")) { String replacedCard = card.replaceAll("\\{Player1\\}", "Poep"); }方法三:直接用
replace()替代replaceAll()
如果你的需求只是普通的字符串替换,不需要正则匹配的高级功能,replace()是更省心的选择——它的两个参数都是普通字符串,不会解析正则:String card = cards.get(count).getCard(); if (card.contains("{Player1}")) { String replacedCard = card.replace("{Player1}", "Poep"); }注:
replace()会替换所有匹配的子串,效果和replaceAll()在这个场景下完全一致,但不会有正则元字符的坑。
内容的提问来源于stack exchange,提问作者Daniëlle
相关产品推荐
相关产品推荐

