Java 使用 {} 大括号的字符串 replaceAll() 方法

Java String replaceAll() method using {} curly brackets

因此,对于我在 Android Studio 中的应用,我想替换以下内容:

String card = cards.get(count).getCard();
if (card.contains("{Player1}")) {
            String replacedCard = card.replaceAll("{Player1}", "Poep");
}

字符串卡的示例可以是:{Player1} 与您旁边的人交换饮料。

不知怎么的,我无法使用 {} 进行替换。随着 { 它说:"Dangling metacharacter"。截图:https://prnt.sc/s2bbl8

有解决办法吗?

您需要使用 \ 转义初始 {。即;

        String card = "{Player1}";

        if (card.contains("{Player1}")) {
            String replacedCard = card.replaceAll("\{Player1}", "Poep");

            System.out.println("replace: " + replacedCard);
        }

replaceAll 的第一个参数是一个被解析为 regalar Expression (regEx) 的字符串。大括号 { } 是特殊的保留元字符,用于在正则表达式中表达某些内容。要将它们作为普通字符进行匹配,您需要使用前导反斜杠 \ 对它们进行转义,并且因为反斜杠也是一个特殊字符,您需要使用额外的反斜杠对自身进行转义:

String replacedCard = card.replaceAll("\{Player1\}", "Poep");

由于 replaceAll 方法的输入值需要正则表达式,因此您需要使用反斜杠对大括号进行转义。大括号是正则表达式上下文中的特殊字符。

在 Java 中,正则表达式中的反斜杠由双反斜杠 \ 完成(参考 https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html)。

所以你需要像这样调整线:

String replacedCard = card.replaceAll("\{Player1\}", "Poep");

{} 是正则表达式的特殊字符。 replaceAll 方法将正则表达式作为第一个参数,因此如果您还想替换大括号,则必须使用 \\ 跳过它们,如下所示:

    String card = cards.get(count).getCard();
    if (card.contains("{Player1}")) {
        String replacedCard = card.replaceAll("\{Player1}", "Poep");
    } 

两个{ }都是保留的正则表达式字符。由于 replaceAll() 函数采用正则表达式参数,因此您必须明确声明 {} 是您实际字符串的一部分。您可以通过在它们前面加上转义字符来做到这一点:\。但是因为转义符也是保留字符,所以也需要转义。

这是编写代码的正确方法:

String card = cards.get(count).getCard();
if (card.contains("{Player1}")) {
    String replacedCard = card.replaceAll("\{Player1\}", "Poep");
}

方法 String.replaceAll 需要一个正则表达式。其他答案已经为此提供了解决方案。但是,如果您不需要正则表达式,那么您也可以使用 String.replace:

String replacedCard = card.replace("{Player1}", "Poep");