随笔 - 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   秦羽的思考  阅读(14640)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
< 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

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