java 替换反斜杠 Unexpected internal error near index 1
来源:互联网 发布:淘宝论文可靠吗 编辑:程序博客网 时间:2024/06/03 14:26
代码:
String str="a\\c";//出现异常,Unexpected internal error near index 1//System.out.println(str.replaceAll("\\", "c"));//以下三种都正确System.out.println(str.replace('\\', 'c'));System.out.println(str.replace("\\", "c"));System.out.println(str.replaceAll("\\\\", "c"));
输出结果
accaccacc
关于这个问题有两种解释办法,都讲得通。
解释一
1、 java字符串或者char中,表示反斜杠,都用\\,两个反斜杠表示。因为根据java语言规范,unicode字符用\uxxxx表示,比如汉字“你”的unicode值是“\u4f60”,所以,为了避免被解释为unicode字符,用双斜线。
2、java的正则表达式中,对于反斜杠用两个反斜杠表示。
根据以上两条,得出
如果是字符串,那么\\表示\
如果是正则表达式,那么\\\\表示\
再来分析上述输出结果的原因,首先查看replace、replaceAll的api,如下图
1、replace(char,char)方法的参数是char,是字符不是正则表达式,所以,用两根反斜杠表示\
2、replace(CharSequence,CharSequence),方法参数是CharSequnce,是字符不是正确表达式,所以用两根反斜杠表示\
3、replaceAll(regex,replacement),方法参数是正则表达式; 字符串中的\,经过规则1(字符串中两个反斜杠表示反斜杠)转换后是\\,再经过规则2(正则表达式中两个反斜杠表示反斜杠),转换为\\\\
补充:
如果在windows操作系统下,也可以使用replaceAll(File.separator+File.separator,"/"),打印File.separator会发现是一个反斜杠,但是内部存的时候是两个反斜杠,所以,如果是两个File.separator,则一共是四个反斜杠
解释二
1、反斜杠(\)属于元字符,在字符串中表示时,必须转义,所以是\\
2、在正则表达式中,元字符要进行双重转义,比如\,转义一次是\\,第二次转义就是\\\\
这种解释,跟js中的正则表达式是一样的,可以参考《javascript高级程序设计》RegExp类型这一节
总结:
无论怎样谨记以下规则:
字符串中用2个反斜杠表示一个反斜杠。
正则表达式中都需要用4个反斜杠表示一个反斜杠。
- java 替换反斜杠 Unexpected internal error near index 1
- java 替换反斜杠 Unexpected internal error near index 1
- java /替换 Unexpected internal error near index 1
- java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \
- java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \
- java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \ ^
- java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \
- Unexpected internal error near index 1
- Unexpected internal error near index 1
- Unexpected internal error near index 1 \ ^错误
- JAVA学习59_ java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \
- java反斜杠替换
- java中用反斜杠替换斜杠
- java中用反斜杠替换正斜杠
- java.util.regex.PatternSyntaxException: Syntax error U_REGEX_RULE_SYNTAX near index 1
- java中反斜杠的替换问题
- JAVA,JS替换字符串反斜杠
- java 字符串单个反斜杠的替换
- 自定义控件
- 黑马程序员——C语言基础---结构体1
- Nstring 字符串的截取 匹配字符串 分割字符串
- 求N以内的所有素数
- 用PHP访问远程文件
- java 替换反斜杠 Unexpected internal error near index 1
- Android新特性之RecyclerView的简单使用
- linux常用命令(60):wc命令
- lanauage identifier changed in iOS 9
- WWW-SSH
- 百度地图API使用系列4-基本地图2
- AJAX总结
- 【扣丁学堂】如何成为一个好的程序员
- lf与f的区别