public static void main(String[] args) {
String k="adasd";
k=k.replaceAll("d","a$");

System.out.println(k);
}
执行后为什么报错呢?java.lang.StringIndexOutOfBoundsException: String index out of range: 2
at java.lang.String.charAt(String.java:444)
at java.util.regex.Matcher.appendReplacement(Matcher.java:559)
at java.util.regex.Matcher.replaceAll(Matcher.java:661)
at java.lang.String.replaceAll(String.java:1663)
at Test.main(Test.java:15)
Exception in thread "main"

解决方案 »

  1.   

    String k = "adasd";
    k = k.replaceAll("d","a~");
    k = k.replace('~', '$'); System.out.println(k);
      

  2.   

    这个问题以前我也碰到过,原因就是$是正则表达式的关键字,所以就导致了会抛出异常,当初我修正的方法就是将字符串转换成字符数组,然后依次替换。不知道有没有更好的方法,希望大家指正。
    String k = "adasd";
    char[] arr = k.toCharArray();
    for (int i = 0; i < arr.length; i++)
    {
      if (arr[i] == 'd')
      {
        arr[i] = '$';
      }
    }
    System.out.println(String.valueOf(arr));
      

  3.   

    原因就在于System.out.println("abcdefg".replaceAll("(c)","{$0,$1}"));
      

  4.   

    dreamover(梦醒了〖http://hellfire.cn〗)
    正解
      

  5.   

    k=k.replaceAll("d","a\\$");
    ===
    正则里的特殊字符可以用\转义