Java中单引号转义替换问题:replaceAll无效求替代方法
解决Java中单引号转义的问题
你遇到的问题其实是Java字符串转义和replaceAll方法特性导致的,我来给你拆解一下原因和解决方案:
为什么你的代码没生效?
replaceAll方法的第一个参数是正则表达式,第二个参数是替换模板字符串,这里的反斜杠是特殊字符——它用来转义模板里的$等符号。你写的"\\'"在Java字符串里会被解析成\',但在替换模板中,\'其实等价于普通的单引号(因为单引号在模板里不需要转义),所以相当于把单引号替换成单引号,自然看不到变化。
两种可行的解决方案
方案1:使用replace方法(推荐)
replace方法不需要处理正则,它会直接替换所有匹配的字符序列,写法更简单:
String cityName = "chay'ekka"; System.out.println("before : " + cityName); cityName = cityName.replace("'", "\\'"); System.out.println("after : " + cityName);
这里"\\'"在Java中会被解析为\',也就是你想要的转义单引号,运行后就能得到chay\'ekka。
方案2:正确使用replaceAll方法
如果一定要用replaceAll,需要在替换字符串里对反斜杠做双重转义:因为Java字符串里的反斜杠本身需要转义(用\\表示一个\),而replaceAll的模板里,要表示一个\又需要再转义一次,所以总共需要写四个反斜杠,再加上单引号:
String cityName = "chay'ekka"; System.out.println("before : " + cityName); cityName = cityName.replaceAll("'", "\\\\'"); System.out.println("after : " + cityName);
这段代码同样能得到你想要的结果。
内容的提问来源于stack exchange,提问作者ekka
相关产品推荐
相关产品推荐

