扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇内容介绍了“Java中转义字符反斜杠的代替方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
成都创新互联主要为客户提供服务项目涵盖了网页视觉设计、VI标志设计、全网营销推广、网站程序开发、HTML5响应式成都网站建设公司、成都手机网站制作、微商城、网站托管及成都网站维护公司、WEB系统开发、域名注册、国内外服务器租用、视频、平面设计、SEO优化排名。设计、前端、后端三个建站步骤的完善服务体系。一人跟踪测试的建站服务标准。已经为成都搬家公司行业客户提供了网站设计服务。
一、需求
现有一个字符串str
String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}";System.out.println("str = " + str);
在控制台的输出为:
str = {\"name\":\"spy\",\"id\":\"123456\"}
目标:将str转化为标准的json格式串str1,以调用JsonUtil的方法,将字符串转为map。即目标str1为:
str1 = {"name":"spy","id":"123456"}
二、实现方法
1. 使用 StringEscapeUtils中的转义与反转义
apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils。利用它可方便地进行html、xml、java等的转义与反转义。
String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}";System.out.println("原始 str = " + str);String str1 = StringEscapeUtils.unescapeJava(str);System.out.println("目标 str1 = " + str1);//对应方法的StringEscapeUtils.escapeJava(str1);//可将str1转义回str
控制台输出:
原始 str = {\"name\":\"spy\",\"id\":\"123456\"}目标 str1 = {"name":"spy","id":"123456"}
2. 使用Java的replaceAll方法
String str1 = str.replaceAll("\\\\","");//控制台str1的输出为:{"name":"spy","id":"123456"}
三、Java 的replaceAll 内涵解析
使用Java的replaceAll(String regex, String replacement)函数,即用replacement替换所有的regex匹配项,regex是一个正则表达式,replacement是字符串。
String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}";
(1)对于串str,Java将其进行转义,\\ 表示 \ ,\” 表示 ” ,故而在Java内存中即为: {\”name\”:\”spy\”,\”id\”:\”123456\”},然而,我们的目标是 {“name”:”spy”,”id”:”123456”},即将转义字符 \ 替换为空。
(2)Java的replaceAll(String regex, String replacement)函数,第一个参数是一个正则表达式。在正则表达式中的“\”与后面紧跟的那个字符构成一个转义字符,代表着特殊的意义,比如”\n”表示换行符等。所以,如果要在正则表达式中表示一个反斜杠\,则应当用\\表达 。但参数regex 首先会经过Java的一次转义,若想表达两个反斜杠 \\,则需四个反斜杠。
综上所述:replaceAll 的第一个参数是正则表达式,故而要经过两次转义,一次Java、一次正则。因此就需要四个反斜杠才可以匹配一个反斜杠。故而,替换一个反斜杠为空的replaceAll的代码即为:
str1 = str.replaceAll("\\\\","");
四、补充说明
String的replaceAll 同Matcher.replaceAll. 如下是String的repalceAll的源码实现。
public String repalceAll(String expr,String substitute){ return Pattern.compile(expr).matcher(this).replaceAll(substitute);}
大家可以注意到Pattern.compile(expr)的参数是正则表达式。故而:
错误写法(运行报错):
String tmp = Pattern.compile("\\").matcher("h\\").replaceAll("ello");
正确写法:
String tmp = Pattern.compile("\\\\").matcher("h\\").replaceAll("ello");//输出为hello
“Java中转义字符反斜杠的代替方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流