2013-05-03 27 views
0

我想要替換所有的實例像替換序列的所有實例的Java

消息:{messagename文}的ImagePath

{IMAGE imagename}

我試着用String類的的replaceAll功能,但無法達到同樣的。

示例代碼:

String str = "HELLO WORLD {IMAGE:abcd}"; 
str = str.replaceAll("{IMAGE:abcd}", "defg"); 

輸出:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition 
{IMAGE:abcd} 
    at java.util.regex.Pattern.error(Pattern.java:1713) 
    at java.util.regex.Pattern.closure(Pattern.java:2775) 
    at java.util.regex.Pattern.sequence(Pattern.java:1889) 
    at java.util.regex.Pattern.expr(Pattern.java:1752) 
    at java.util.regex.Pattern.compile(Pattern.java:1460) 
    at java.util.regex.Pattern.<init>(Pattern.java:1133) 
    at java.util.regex.Pattern.compile(Pattern.java:823) 
    at java.lang.String.replaceAll(String.java:2189) 
    at com.example.WorkSheet.main(WorkSheet.java:28) 

回答

3

{是一個正則表達式元字符,並應被轉義,嘗試這種

str = str.replaceAll("\\{IMAGE:abcd}", "defg"); 

沒有如果它足以逃脫{,則正則表達式編譯器會理解}被用作常規字符。

0

{}是正則表達式中用於標記repititions特殊字符。嘗試使用\\或使用Matcher.quoteReplacement("{IMAGE:abcd}")逃脫它們,它們會轉義所有特殊字符。

0

replaceAll方法的參數爲replaceAll(String Regex, String replacement)其中Regex應該是一個正則表達式。所以,你可能想使用:

str.replaceAll("\\{IMAGE:abcd}","defg"); 

,而不是

str.replaceAll("{IMAGE:abcd}", "defg"); 
0

你必須逃脫字符 「{」,如下圖所示:

public class A{ 
public static void main(String[] args) { 

    String str = "HELLO WORLD {IMAGE:abcd}"; 
    str = str.replaceAll("\\{IMAGE:abcd\\}", "defg"); 
    System.out.println(str); 
    } 
} 

我認爲這將解決您的問題。

0

嘗試。

str = str.replaceAll("\\{IMAGE:abcd\\}", "defg"); 
0
import java.util.*; 
public class A 
{ 
    public static void main(String [] args) 
    { 
     String str = "HELLO WORLD {IMAGE:abcd}"; 
str = str.replaceAll("\\{IMAGE:abcd}", "defg"); 
    System.out.println(str); 
    } 
} 
相關問題