0

我想替换所有实例

{IMAGE:imagename}imagepath

{MESSAGE:messagename}带有消息

我尝试使用字符串类的 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)
4

6 回答 6

3

{是一个正则表达式元字符,应该转义,试试这个

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

请注意,转义就足够了{,正则表达式编译器会理解它}用作常规字符。

于 2013-05-03T06:27:06.153 回答
0

{并且}是正则表达式中用于标记重复的特殊字符。尝试使用\\或使用转义它们Matcher.quoteReplacement("{IMAGE:abcd}"),这会转义所有特殊字符。

于 2013-05-03T06:28:12.267 回答
0

replaceAll方法将参数作为应该是正则表达式的replaceAll(String Regex, String replacement)地方。Regex所以你可能想使用:

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

代替

str.replaceAll("{IMAGE:abcd}", "defg");
于 2013-05-03T06:28:28.923 回答
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);
  }
}  

我认为它会解决你的问题。

于 2013-05-03T06:29:01.500 回答
0

尝试。

 str = str.replaceAll("\\{IMAGE:abcd\\}", "defg");
于 2013-05-03T06:29:23.550 回答
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);
    }
}
于 2013-05-03T06:29:51.500 回答