繁体   English   中英

在java中转义*字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM