參考:
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
}
