关于java转义字符\解析。

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/androidzmm/article/details/82784689

关于java的转义字符我一直有疑问。之前都没有仔细研究过,模糊的用过。今天刚好有时间就仔细研究了下。

下面是一段后台返回的json字符串:

 String jsonStr="{\\\"爆发训练(休息8s)\\\":\\\"24次,3组\\\",\\\"初级肌力(休息7s)\\\":\\\"14次,2组\\\"}"

这样一段的字符串需要解析出来。首先我们需要把转义的\去掉。然后才能转换成JOSNObject.

这一段字符串打印输出以后是这样:

{\"爆发训练(休息8s)\":\"24次,3组\",\"初级肌力(休息7s)\":\"14次,2组\"}

我刚开始会很纳闷,\\\"怎么转义到只剩下\"了,其实我们只需要从后忘前看,\"转义后是",\\转义以后是\,所以最后就是\";

举个栗子:String test = "aaaa\\\\\"bbbb\\\\\\";输出就是aaaa\\"bbbb\\\;

我们需要把jsonStr串转换成标准的json字符串我们可以使用String的replaceAll方法。

使用Java的replaceAll(String regex, String replacement)函数,
即用replacement替换所有的regex匹配项,regex是一个正则表达式,replacement是字符串。

(1)对于串jsonStr,Java将其进行转义,\\ 表示 \ ,\" 表示 " ,所以我们真正的字符串应该是
{\"爆发训练(休息8s)\":\"24次,3组\",\"初级肌力(休息7s)\":\"14次,2组\"},然而,
我们的目标是 {"爆发训练(休息8s)":"24次,3组","初级肌力(休息7s)":"14次,2组"},
即将转义字符 \ 替换为空。

(2)Java的replaceAll(String regex, String replacement)函数,第一个参数是一个正则表达式。
在正则表达式中的\与后面紧跟的那个字符构成一个转义字符,代表着特殊的意义,比如"\n"表示换行符等。
所以,如果要在正则表达式中表示一个反斜杠\,则应当用\\表达 。但参数regex 首先会经过Java的一次
转义,若想表达两个反斜杠 \\,则需四个反斜杠。

综上所述:replaceAll 的第一个参数是正则表达式,故而要经过两次转义,一次Java、一次正则。
因此就需要四个反斜杠才可以匹配一个反斜杠。故而,替换一个反斜杠为空的replaceAll的代码即为:

 String s = jsonStr.replaceAll("\\\\", "");

综上所述。如果需要用正则表达式匹配出两个反斜杠:则需要8个\.

再次举个栗子:String test="\\\\\\abc";其真实的字符串是\\\abc;我们要去掉其中的\。我们需要12个\吗??no.我们只需要匹配一个。然后全部替换掉就好了。即test.replaceAll("\\\\");就可以输出abc了。

当然,我们也可以使用replace(CharSequence target, CharSequence replacement);这个就不需要经过正则表达式的转义了。只需要Java的一层转义就好了。即  String replace = jsonStr.replace("\\", "");

输出:{"爆发训练(休息8s)":"24次,3组","初级肌力(休息7s)":"14次,2组"}

剩下的就是Josn解析了。不知道如何解析不固定的中文key这种json请看我的上一篇博客:

解析key为中文的json

每日语录:

善良一点,因为每个人都在与人生苦战。如果真正想要了解他们,只需要用心去看。——奇迹男孩 ​​​

单曲循环:《钟无艳》

展开阅读全文

没有更多推荐了,返回首页