【问题标题】:Java String replaceAll() method using {} curly brackets使用 {} 大括号的 Java String replaceAll() 方法
【发布时间】:2020-04-19 15:10:18
【问题描述】:

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

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

String 卡的一个例子可以是:{Player1} 和你旁边的人换酒。

不知何故,我无法使用 {} 进行替换。用 { 它说:“悬空元字符”。截图:https://prnt.sc/s2bbl8

有解决办法吗?

【问题讨论】:

  • 考虑使用String.replace 而不是String.replaceAll

标签: java string replaceall


【解决方案1】:

replaceAll 的第一个参数是一个被解析为regalar Expression (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");
    }
    

    【讨论】:

      【解决方案3】:

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

              String card = "{Player1}";
      
              if (card.contains("{Player1}")) {
                  String replacedCard = card.replaceAll("\\{Player1}", "Poep");
      
                  System.out.println("replace: " + replacedCard);
              }
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

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

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              猜你喜欢
              • 2011-07-08
              • 1970-01-01
              • 2012-06-29
              • 2012-01-19
              • 2015-10-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多