[英]Escaping * character in java
我试图在String上执行以下操作。
if (combatLog.contains("//*name//*")) {
combatLog.replaceAll("//*name//*",glad.target.name);
}
斜杠是我试图逃避*,因为没有它们就行不通。 我还尝试了一个斜杠,并且单独包含或替换所有斜杠。 谢谢
replaceAll()
(反直觉地)采用正则表达式,而不是字符串。
要转义正则表达式的字符,你需要一个双后斜杠(加倍来逃避字符串文字的反斜杠)。
但是,您不需要正则表达式。 你应该简单地调用replace()
,这不需要任何转义。
你正在使用正斜杠。 反斜杠是转义字符。 此外,除非字符串用于正则表达式或类似的东西,否则你不需要逃避*
,或者/
那就是你想要逃脱的东西。
如果combatLog是String,则其contains方法仅检查字符序列。 如果您在字符串中查找*name*
,则只需要调用combatLog.contains("*name*")
。
您正在使用正斜杠使用反斜杠: \\
来转义字符
[编辑]也像slaks说你需要使用replace()
接受字符串作为输入而不是正则表达式。
不要忘记字符串的不变性 ,并重新分配新创建的字符串。 此外,如果您的if
块不包含任何其他代码,则根本不需要if
检查。
你有3个选择:
if (combatLog.contains("*name*")) { // don't escape in contains()
combatLog = combatLog.replaceAll("\\*name\\*", replacement);// correct escape
}
// another regex based solution
if (combatLog.contains("*name*")) {
combatLog = combatLog.replaceAll("[*]name[*]", replacement);// character class
}
或没有正则表达式
if (combatLog.contains("*name*")) {
combatLog = combatLog.replace("*name*", replacement);// literal string
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.