java 转义 反斜杠 Unexpected internal error near index 1

server/2025/1/13 2:35:19/

代码:

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"));

输出结果

acc
acc
acc

关于这个问题有两种解释办法,都讲得通。

解释一

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个反斜杠表示一个反斜杠


http://www.ppmy.cn/server/157909.html

相关文章

Excel如何分区设置密码,一个区域一个密码,数据收集时使用太方便了

大家好,我是小鱼。 很多小伙伴在使用Excel表格的时候,有可能需要为不同的区域设置不同的密码,比如搜集公司不同的部门,或者学校不同的班级的信息时,为了使收集的信息不被别人改动,这时就需要为他们各自设置…

完全自定义Qt翻译功能,不使用Qt Linguist的.ts 和 .qm类型翻译

这篇文章展示了集成Qt Linguist 的功能。 但是有时候Qt的翻译功能比较繁琐,我们简单项目只需要使用本地化功能,将中文字符串导入到项目中,避免编码格式问题导致的乱码。 只需要使用一个简单的json或者其他格式的本地文件作为映射的key/value.…

spring mvc源码学习笔记之八

本文说点儿简单的。 如果你想研究基于 XML 配置的 spring mvc 的话,可以简单扫一眼本文。 在基于 XML 配置的 spring mvc 开发中,我们主要就是通过 spring 提供的各种标签来配置。 但是,大家是不是都有个疑问,spring 到底给我们提…

基于Auto-Editor一键预处理音视频无声片段

在视频制作与后期处理中,长时间的无声片段往往会增加视频观看的乏味感,尤其在讲解类口播视频中,这种片段频繁出现。因此,自动识别并删除这些无声片段的需求逐渐增多。Auto-Editor是一款开源的自动化视频编辑工具,它通过自动检测音频信号,可以一键删除无声片段,大大提高视…

投机解码论文阅读:Falcon

题目:Falcon: Faster and Parallel Inference of Large Language Models through Enhanced Semi-Autoregressive Drafting and Custom-Designed Decoding Tree 地址:https://arxiv.org/pdf/2412.12639 一看它的架构图,可以发现它是基于EAGLE…

【Linux】4.Linux常见指令以及权限理解(2)

文章目录 3. Linux指令3.1 ls指令和rm指令补充3.2 man指令(重要)3.3cp指令(重要)输出重定向3.3.1ubuntu20.04如何安装tree 3.4 mv指令(重要)mv指令更改文件名mv指令更改目录名 如何看待指令指令的重命名3.5…

网络安全技术百科全书:术语与概念解析

Burp Suite 是一款信息安全从业人员必备的集成型的渗透测试工具,它采用自动测试和半自动测试的方式,通过拦截HTTP/HTTPS的Web数据包,充当浏览器和相关应用程序的中间人,进行拦截、修改、重放数据包进行测试,是Web安全人…

Wireshark TCP 分析标志位说明汇总

在 Wireshark 网络数据包分析中,比较常见的一些 TCP 分析标志位的说明和案例汇总如下: TCP Previous segment not capturedTCP Window FullTCP ACKed unseen segmentTCP Port numbers reusedTCP ZeroWindowTCP ZeroWindowProbeTCP Window UpdateTCP Kee…