替换java中序列的所有实例

时间:2013-05-03 06:24:06

标签: java regex string

我想替换像

这样的所有实例 带有 imagepath

{IMAGE:imagename}

使用消息

{MESSAGE:messagename}

我尝试使用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)

6 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

replaceAll方法将参数设为replaceAll(String Regex, String replacement),其中Regex应为正则表达式。所以你可能想要使用:

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

而不是

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

答案 3 :(得分: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);
  }
}  

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

答案 4 :(得分:0)

试。

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

答案 5 :(得分: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);
    }
}