Java String replaceAll() 方法使用 {} 大括号。

3

我想在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.replace 而不是 String.replaceAll - Mark Rotteveel
6个回答

6
replaceAll的第一个参数是一个字符串,它被解析为一个正则表达式(regEx)。大括号{ }是特殊保留的元字符,用于表示正则表达式中的某个内容。如果要将它们作为普通字符进行匹配,需要在前面加上反斜杠\进行转义,而由于反斜杠本身也是一个特殊字符,所以还需要用额外的反斜杠对其进行转义:
String replacedCard = card.replaceAll("\\{Player1\\}", "Poep");

2

{ }都是正则表达式中的保留字符。由于replaceAll()函数需要传入一个正则表达式参数,您必须明确说明{}是您实际字符串的一部分。您可以通过在它们前面加上转义字符\来实现这一点。但是,由于转义字符也是保留字符,您需要对其进行转义。

以下是编写代码的正确方式:

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

1

你需要使用 \ 转义初始的 {。例如:

        String card = "{Player1}";

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

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

1

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

在Java中,通过双反斜杠\\实现正则表达式中的反斜杠(请参见https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html)。

因此,您需要像这样调整该行:

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

1

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

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

0

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

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

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