如何在Java中替换'{Name}'

5

我需要用值替换字符串中的一个值,例如{Name}
我们如何替换特殊字符{}?
我尝试过这个:

str.replaceAll("{Name}","A");

但是如果我们有特殊字符,这种方法就不起作用了。


2
尝试使用 str.replaceAll("\{Name\}","A"); 转义字符。 - David Herrero
2个回答

14

使用replace而不是replaceAll,因为replace不需要解析正则表达式。

例如:(演示代码)

String str = "Here it is: {Name} And again: {Name}";
System.out.println("Before: " + str);
str = str.replace("{Name}","A");
System.out.println("After: " + str);

输出:

之前:这是它:{Name} 而且再次:{Name}
之后:这是它:A 而且再次:A

12

根据JavaDoc.replaceAll(String regex, String replacement)方法将正则表达式作为第一个参数。

正好在正则表达式语法中,{}具有特殊意义,因此需要进行转义。尝试使用str.replaceAll("\\{Name\\}","A");

前面多出的\指示正则表达式引擎将{}视为实际字符(而不是其特殊含义)。由于这是Java,您还需要转义\字符,因此需要两个。


1
使用字面替换的replaceAll是过度杀伤力的。 - T.J. Crowder
过度设计但却很流行,被从一个代码复制到另一个代码而没有任何反思。 - Jacek Cz
@npinti:什么循环?replace会替换所有出现的内容,就像replaceAll一样。 - T.J. Crowder
@T.J.Crowder:是的,抱歉我的错,我把它和其他东西混淆了。 - npinti
谢谢。使用转义字符有效了。 str.replaceAll("\{Name\}","A"); - Akhila
@Akhila:不用正则表达式的话,T.J. Crowder 建议的更好。不客气。 - npinti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接