簡體   English   中英

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} 與您旁邊的人交換飲料。

不知何故,我無法使用 {} 進行替換。 用 { 它說:“懸空元字符”。 截圖: https://prnt.sc/s2bbl8

有解決方案嗎?

replaceAll的第一個參數是一個被解析為正則表達式(regEx) 的字符串。 大括號{ }是特殊的保留元字符,用於在正則表達式中表達某些內容。 要將它們匹配為普通字符,您需要使用前導反斜杠\將它們轉義,並且因為反斜杠也是特殊字符,您需要使用額外的反斜杠對其自身進行轉義:

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

兩個{ }都是保留的正則表達式字符。 由於replaceAll() function 接受正則表達式參數,因此您必須明確 state 即{}是實際字符串的一部分。 您可以通過在它們前面加上轉義字符來做到這一點: \ 但是因為轉義字符也是保留字符,所以你也需要轉義它。

這是編寫代碼的正確方法:

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

您需要使用 \ 轉義初始 {。 IE;

        String card = "{Player1}";

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

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

由於 replaceAll 方法的輸入值需要一個正則表達式,因此您需要使用反斜杠轉義大括號。 花括號是正則表達式上下文中的特殊字符。

In Java a backslash in a regex is accomplished by a double backslash \\ (see https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html for reference).

所以你需要像這樣調整這條線:

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

String.replaceAll方法需要一個正則表達式。 其他答案已經為此提供了解決方案。 但是,如果您不需要正則表達式,那么您也可以使用String.replace

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

{} 是正則表達式的特殊字符。 replaceAll 方法將正則表達式作為第一個參數,因此如果您還想替換大括號,則必須用 \\ 跳過它們,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM