String.replaceAll替换目标为反斜杠
来源:互联网 发布:七星彩规律软件 编辑:程序博客网 时间:2024/05/18 12:32
今天想把string的某些内容替换为File.separator,windows环境出现个小问题,之前没注意过,记录下。
问题现象:
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: 1at 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 missingat 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", "\\$")
阅读全文
0 0
- String.replaceAll替换目标为反斜杠
- String.replaceAll()方法替换字符串中的反斜杠(\)
- 如何使用String的replaceAll方法替换字符串中的反斜杠“\”或增加反斜杠“\”
- 如何使用String的replaceAll方法替换字符串中的反斜杠“\”或增加反斜杠“\”
- 探究java中String.replaceAll方法把换行符(\n)替换为明文显示(\n)为何需要四个反斜杠(\\\\n)
- mysql 正斜杠 替换为 反斜杠
- 使用java中replaceAll方法替换字符串中的反斜杠
- 使用java中replaceAll方法替换字符串中的反斜杠
- 使用java中replaceAll方法替换字符串中的反斜杠
- 使用java中replaceAll方法替换字符串中的反斜杠
- 使用java中replaceAll方法替换字符串中的反斜杠
- java中replaceAll方法替换字符串中的反斜杠
- 使用replaceAll()方法替换字符串中的反斜杠:左斜杠(\)和右斜杠(/)
- 使用replaceAll()方法替换字符串中的反斜杠:(\)和正斜杠(/)
- java中replaceAll反斜杠\
- Java学习笔记2:使用replaceAll()方法替换字符串中的反斜杠:左斜杠(\)和右斜杠(/)
- String的replaceAll方法替换反斜线报异常
- 替换反斜杠
- eclipse-Project facet Java version 1.8 is not supported.
- 总结随笔_了解Tomcat(概述,安装、启动、配置)
- HTML5----响应式(自适应)网页设计
- 将QNX应用上传到QNX虚拟机上
- 使用openssl生成.p12文件时,直接在命令中带密码参数,而不用在终端运行命令时输入
- String.replaceAll替换目标为反斜杠
- Ubuntu安装JDK与环境变量配置
- 数据结构实验之链表九:双向链表
- WdatePicker日期插件
- 剑指offer--旋转数组的最小数字
- Spring Boot 配置加载顺序
- springdata实现过程
- 数据结构实验之串一:KMP简单应用
- flex弹性布局(所有孩子设置宽度计算后超过父亲时)