public class RegTest {
public static void main(String[] args) {
String message = "csdn java{0}";
String pattern = "(\\w|\\W)*\\{0\\}(\\w|\\W)*";
                String para = "test!@#%^&*()_+";
if (message.matches(pattern)) {
message = message.replaceFirst("\\{0\\}",  para);
}
}
}
代码如上.
如果para中包含字符$,程序执行的时候会报错,如下:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 25
at java.lang.String.charAt(String.java(Compiled Code))
at java.util.regex.Matcher.appendReplacement(Matcher.java:573)
at java.util.regex.Matcher.replaceFirst(Matcher.java:715)
at java.lang.String.replaceFirst(String.java:2005)
at RegTest.main(RegTest.java:19)是否被正则表达式匹配的字符串中不允许出现$符号?

解决方案 »

  1.   

    我放上去的代码里面para中没有$,是能正确执行.加上$就会出错.
      

  2.   

    改成
    message = message.replaceFirst("\\{0\\}", Matcher.quoteReplacement(para));
    试试
      

  3.   

    String message = "csdn java{0}"; 
    String pattern = "(\\w|\\W)*\\{0\\}(\\w|\\W)*"; 
    String para = "test!@#%^\\$&*()_+"; 
    if (message.matches(pattern)) 

    message = message.replaceFirst("\\{0\\}",  para); 

    System.out.println(message);$前加\\:\\$已经通过测试
      

  4.   

    谢谢大家.to 4 楼:
    Matcher.quoteReplacement()是在jdk1.5才有的.我这里必须是jdk1.4.:(用转义的方法,在para字符串中的$前加上\\,确实能执行成功.
    有没有不用修改para字符串的方法?
      

  5.   

    搞定了.谢谢大家.
    先把para中的"$"找出来,用"\\$"替换,然后再用正则表达式replace.
    不知道能不能用正则表达式把字符串中的"$"替换为"\\$"? 
      

  6.   

    str = str.replace("$", "\\\\$");
      

  7.   

    public class Test {
        public static void main(String[] args) {
            String message = "csdn java {0} abc {0}";
            String para = "test!@#%^&*()_+$";
            if (message.indexOf("{0}") > -1) {
                message = message.replace("{0}", para);
            }
            System.out.println(message);
        }
    }