随笔 - 231  文章 - 0  评论 - 64  阅读 - 88万

JAVA的转义字符

参考:

https://www.cnblogs.com/qinning/p/11006380.html

https://www.cnblogs.com/yaochc/p/4574910.html

https://www.iteye.com/blog/juck-1541247

 

常见的转义字符

转移字符对应的英文是escape character  , 转义字符串(Escape Sequence)

字母前面加上捺斜线"\"来表示常见的那些不能显示的ASCII字符.称为转义字符.如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。

所有的转义字符和所对应的意义:
转义字符
意义
ASCII码值(十进制)
     
\b
退格(BS) ,将当前位置移到前一列
008
\f
换页(FF),将当前位置移到下页开头
012
\n
换行(LF) ,将当前位置移到下一行开头
010
\r
回车(CR) ,将当前位置移到本行开头
013
\t
水平制表(HT) (跳到下一个TAB位置)
009
\v
垂直制表(VT)
011
\\
代表一个反斜线字符''\'
092
\'
代表一个单引号(撇号)字符
039
\"
代表一个双引号字符
034
\0
空字符(NULL)
000
\ddd
1到3位八进制数所代表的任意字符
三位八进制
\uhhhh
1到2位十六进制所代表的任意字符
二位十六进制
注意:区分,斜杠:"/" 与 反斜杠:"\" ,此处不可互换
 

点的转义:. ==> u002E
美元符号的转义:$ ==> u0024
乘方符号的转义:^ ==> u005E
左大括号的转义:{ ==> u007B
左方括号的转义:[ ==> u005B
左圆括号的转义:( ==> u0028
竖线的转义:| ==> u007C
右圆括号的转义:) ==> u0029
星号的转义:* ==> u002A
加号的转义:+ ==> u002B
问号的转义:? ==> u003F
反斜杠的转义: ==> u005C

所以\\|实际上还可以写成:\\u007C

 

常见用法

JSONObject使用时丢失转译字符

项目中遇到使用JSONObject丢失转译字符,特此记录下:

原String json 内容如下:

<

{

"paymentAuthMode":"2D",
"mcc":"5300",
"saveAsset":false,
"shipToStreetAddr1":"\\Mid State Sports , MS 39056 usa",
"payMode":"SALES",
"requestBaseAmount":{
"amount":3209.99,
"currency":{
"symbol":"USD",
"currencyCode":"USD",
"defaultFractionDigits":2,
"displayName":"美元",
"numericCode":840
},
"centFactor":100,
"currencyCode":"USD",
"cent":320999,
"currencyValue":"840"
}
}

>

放到“”中自动加了转译符,内容如下:

<

String json="\n"
+ "{\n"
+ " \n"
+ " \"paymentAuthMode\":\"2D\",\n"
+ " \"mcc\":\"5300\",\n"
+ " \"saveAsset\":false,\n"
+ " \"shipToStreetAddr1\":\"\\\\Mid State Sports , MS 39056 usa\",\n"
+ " \"payMode\":\"SALES\",\n"
+ " \"requestBaseAmount\":{\n"
+ " \"amount\":3209.99,\n"
+ " \"currency\":{\n"
+ " \"symbol\":\"USD\",\n"
+ " \"currencyCode\":\"USD\",\n"
+ " \"defaultFractionDigits\":2,\n"
+ " \"displayName\":\"美元\",\n"
+ " \"numericCode\":840\n"
+ " },\n"
+ " \"centFactor\":100,\n"
+ " \"currencyCode\":\"USD\",\n"
+ " \"cent\":320999,\n"
+ " \"currencyValue\":\"840\"\n"
+ " }\n"
+ "}";

JSONObject jsonObject = (JSONObject)JSONObject.parse(json);
System.out.println(jsonObject);

>

运行过程中debug得到JSONObject的值已少了一个\,被当作转译符处理,截图如下:

为了后续转译不出问题,必须要再调用toJSONString(),补齐丢失的\

 

 

 另外如果要拼接\时要小心处理,以下这段代码拼接错误

原始内容为:"s":"\\ Mid State

<

String input = "\"s\":\"\\\\ Mid State";

int length = input.length();
StringBuilder result = new StringBuilder(length);
for (int i = 0; i < length; i++) {
char c = input.charAt(i);
System.out.println(c);
switch (c) {
case '\'': {
result.append("\\'");
break;
}
case '\"': {
result.append("\\\"");
break;
}
default: {
result.append(c);
break;
}
}
}
System.out.println(result.toString());
System.out.println(result.toString().toString());

>

运行结果均是:\"s\":\"\\ Mid State【丢失了两个\】

原因如下:

这里对\进行append,所以2个\变成了2个\,原计划是要变成4个\。

 

 

其他

String t = "a||b||c||d";

String[] temp = t.split("\\|\\|");

System.out.println(temp.length);

主要是:"\\|\\|" 代表什么意思?

 \\会转义成反斜杠,反斜杠本身就是转义符,所有就成了\|”,在进行转义就是|,所以\\|实际上是“|”。

 

 

如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
“.”和“|”都是转义字符,必须得加"\\";

 


String sName = "Java转义字符(补遗)";
sName = sName.replaceFirst("\\(补遗\\)","");
System.out.println(sName);//Java转义字符

 

String t = "a|b|c|d";
String[] temp = t.split("\\u007C");
for (String a :temp){
System.out.print(a);//abcd
}

 

 

 

 

 
posted on   秦羽的思考  阅读(14646)  评论(0编辑  收藏  举报
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示