Java Метод String replaceAll () с использованием {} фигурных скобок - PullRequest
3 голосов
/ 19 апреля 2020

Так что для моего приложения в Android Studio я хочу заменить следующее:

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

Примером карты String может быть: {Player1} поменять напитки с человеком рядом с вами .

Почему-то я не могу использовать {} для замены. С {он говорит: "Висячий метасимвол". Снимок экрана: https://prnt.sc/s2bbl8

Есть ли решение для этого?

Ответы [ 6 ]

6 голосов
/ 19 апреля 2020

первый аргумент replaceAll - это строка, которая анализируется в * * * *. * Regalar Expression (regEx). Скобки { } - это специальные зарезервированные метасимволы для express чего-то внутри регулярного выражения. Чтобы сопоставить их с обычными символами, вам необходимо экранировать их с помощью начального обратного знака sh \, а поскольку обратный символ sh также является специальным символом, вам необходимо экранировать себя с дополнительным обратным символом sh:

String replacedCard = card.replaceAll("\\{Player1\\}", "Poep");
2 голосов
/ 19 апреля 2020

Оба { } являются зарезервированными символами регулярного выражения. Поскольку функция replaceAll() принимает параметр регулярного выражения, вы должны явно указать, что { и } являются частью вашей фактической строки. Вы можете сделать это, поставив перед ними префикс escape-символа: \. Но поскольку escape-символ также является зарезервированным символом, его также необходимо экранировать.

Вот правильный способ написания кода:

String card = cards.get(count).getCard();
if (card.contains("{Player1}")) {
    String replacedCard = card.replaceAll("\\{Player1\\}", "Poep");
}
1 голос
/ 19 апреля 2020

Метод String.replaceAll ожидает регулярное выражение. Другие ответы уже дают решение для этого. Однако если вам не нужны регулярные выражения, вы также можете использовать String.replace:

String replacedCard = card.replace("{Player1}", "Poep");
1 голос
/ 19 апреля 2020

Поскольку входное значение метода replaceAll предполагает регулярное выражение, вам необходимо экранировать фигурные скобки с обратным символом sh. Фигурные скобки - это специальные символы в контексте регулярных выражений.

В Java обратная косая черта sh в регулярном выражении выполняется двойной обратной косой чертой sh \\ (см. * 1005). * для справки).

Таким образом, вам необходимо настроить строку следующим образом:

String replacedCard = card.replaceAll("\\{Player1\\}", "Poep");
1 голос
/ 19 апреля 2020

Вам нужно экранировать начальную букву {с \. Т.е.

        String card = "{Player1}";

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

            System.out.println("replace: " + replacedCard);
        }
0 голосов
/ 19 апреля 2020

{} - это специальные символы для регулярных выражений. Метод replaceAll принимает в качестве первого параметра регулярные выражения, поэтому, если вы хотите также заменить фигурные скобки, вы должны пропустить их на \\, как показано ниже:

    String card = cards.get(count).getCard();
    if (card.contains("{Player1}")) {
        String replacedCard = card.replaceAll("\\{Player1}", "Poep");
    } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...