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
}

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM