String.replaceAll替换目标为反斜杠
2017-10-18 16:32
274 查看
今天想把string的某些内容替换为File.separator,windows环境出现个小问题,之前没注意过,记录下。
问题现象:
JDK1.6
JDK1.8也抛异常,但异常信息有调整:
查看了下源码,String.replaceAll是通过Matcher.appendReplacement实现,在该实现中,如果遇到转义字符,则取下一个字符作为替换字符,而windows下的File.separator恰好为转义字符\,所以导致问题出现。
正确需要如下形式:
另外$也是一个特殊字符(用于获取分组),使用时需要转义
问题现象:
public static void main(String[] args) { System.out.println("abcad".replaceAll("a", File.separator)); }很简单的代码,但执行异常:
JDK1.6
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1 at java.lang.String.charAt(String.java:686) at java.util.regex.Matcher.appendReplacement(Matcher.java:703) at java.util.regex.Matcher.replaceAll(Matcher.java:813) at java.lang.String.replaceAll(String.java:2189) at com.aires.login.LoginUtil.main(LoginUtil.java:12)
JDK1.8也抛异常,但异常信息有调整:
Exception in thread "main" java.lang.IllegalArgumentException: character to be escaped is missing at java.util.regex.Matcher.appendReplacement(Matcher.java:809) at java.util.regex.Matcher.replaceAll(Matcher.java:955) at java.lang.String.replaceAll(String.java:2223) at com.aires.login.LoginUtil.main(LoginUtil.java:12)
查看了下源码,String.replaceAll是通过Matcher.appendReplacement实现,在该实现中,如果遇到转义字符,则取下一个字符作为替换字符,而windows下的File.separator恰好为转义字符\,所以导致问题出现。
char nextChar = replacement.charAt(cursor); if (nextChar == '\\') { cursor++;//此处如果发现是转义字符\,将向后移动一位 nextChar = replacement.charAt(cursor); result.append(nextChar); cursor++; }
正确需要如下形式:
public static void main(String[] args) { System.out.println("abcad".replaceAll("a", "\\\\")); }
另外$也是一个特殊字符(用于获取分组),使用时需要转义
"abcad".replaceAll("a", "\\$")
相关文章推荐
- String.replaceAll()方法替换字符串中的反斜杠(\)
- 探究java中String.replaceAll方法把换行符(\n)替换为明文显示(\n)为何需要四个反斜杠(\\\\n)
- java中字符串替换-String.replace StringreplaceAll
- java,String.replaceAll中在替换路径(含有/或者/)容易出现的问题
- 如何将java中的"/"替换为"/"以及replaceAll(String regex, String replacement) 注意事项
- Java替换字符串中的“\"”的处理方法(String.replaceAll的源码分析)
- Scala String.replaceALL() 替换 '\' 字符
- java replaceall方法替换String的几种特殊情况
- Java:String 字符串的替换函数 replace replaceAll replaceFirst
- js使用正则实现ReplaceAll----全部替换的方法
- js的replace如何全部替换目标字符串
- php preg_match_all结合str_replace替换内容中所有img
- Java StringBuffer 字符串替换函数 replace
- C++实现string.replace(字符串替换)
- C#中如何实现JAVA中的String.replaceAll()方法功能
- [转]String.Replace 和 String.ReplaceAll 的区别
- java中使用String的replace方法替换html模板保存文件
- JAVA中string.replace()和string.replaceAll()的区别及用法
- java replaceAll之$替换
- js使用正则实现ReplaceAll全部替换的方法