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
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用