Java 轉移字符與字符的處理

那麼這裏在列上一些轉義字符
 \\ 反斜槓 
\t 間隔 ('\u0009')
\n 換行 ('\u000A')
\r 回車 ('\u000D')
\d 數字 等價於 [0-9]
\D 非數字 等價於 [^0-9]
\s 空白符號 [\t\n\x0B\f\r]
\S 非空白符號 [^\t\n\x0B\f\r]
\w 單獨字符 [a-zA-Z_0-9]
\W 非單獨字符 [^a-zA-Z_0-9]
\f 換頁符 
\e Escape
\b 一個單詞的邊界 
\B 一個非單詞的邊界 
\G 前一個匹配的結束
------------------------------------------------------------------------------------
我在應用中用到一些給大家總結一下僅供大家參考
1、如果用“.”作爲分隔的話必須是如下寫法String.split("\\."),這樣才
能正確的分隔開不能用String.split(".");
2、如果用“|”作爲分隔的話必須是如下寫法String.split("\\|"),這樣才
能正確的分隔開不能用String.split("|");
“.”和“|”都是轉義字符必須得加"\\";
3、如果在一個字符串中有多個分隔符可以用“|”作爲連字符比如“acount=?
and uu =? or n=?”,把三個都分隔出來可以用String.split("and|or");
使用String.split方法分隔字符串時分隔符如果用到一些特殊字符可能會
得不到我們預期的結果。 
我們看jdk doc中說明  
public String[] split(String regex)
 Splits this string around matches of the given regular expression. 
參數regex是一個 regular-expression的匹配模式而不是一個簡單的String
他對一些特殊的字符可能會出現你預想不到的結果比如測試下面的代碼
用豎線 | 分隔字符串你將得不到預期的結果
    String[] aa = "aaa|bbb|ccc".split("|");
    //String[] aa = "aaa|bbb|ccc".split("\\|"); 這樣才能得到正確的結果
    for (int i = 0 ; i <aa.length ; i++ ) {
      System.out.println("--"+aa[i]); 
    } 
用豎 * 分隔字符串運行將拋出Java.util.regex.PatternSyntaxException異
常用加號 + 也是如此。
    String[] aa = "aaa*bbb*ccc".split("*");
    //String[] aa = "aaa|bbb|ccc".split("\\*"); 這樣才能得到正確的結
果    
    for (int i = 0 ; i <aa.length ; i++ ) {
      System.out.println("--"+aa[i]); 
    }  顯然+ * 不是有效的模式匹配規則表達式用"\\*" "\\+"轉義後即可得到正
確的結果。
"|" 分隔串時雖然能夠執行但是卻不是預期的目的"\\|"轉義後即可得到正
確的結果。
還有如果想在串中使用"\"字符則也需要轉義.首先要表達"aaaa\bbbb"這個串
就應該用"aaaa\\bbbb",如果要分隔就應該這樣才能得到正確結果
String[] aa = "aaa\\bbb\\bccc".split("\\\\");
 
這是獲取當前簡單java工程的classpath的兩種方法,控制檯輸出如下:
path: file:/E:/LuJunXian/aotospace/ReadOffice/bin/
path2: E:\LuJunXian\aotospace\ReadOffice

可見:path使用的分隔符是斜槓:“/” ; 而path2使用的是反斜槓: "\" ;
在java語言中,“\”所代表的是轉義字符,並不代表反斜槓本身,所以在java代碼中想要表示反斜槓本身“\”,則需要表示爲“\\”,前一個反斜槓表示轉義後一個反斜槓爲反斜槓本身,也就是說,如果需要在控制檯通過System.Out.println()打印出一個反斜槓的話,代碼需要這樣寫System.out.println("\\");再稍微的延伸一下,如果需要在控制檯打印單引號或者雙引號的話,代碼是System.out.println("\"");如果不加轉義字符“\”就會出現配對的錯誤。

在String類的方法裏面,split和replace或者replaceAll會經常被用到,比如,若需要將path2的文件分隔符轉換爲path的類型,則需要將代碼寫成 path2.replaceAll("\\\\", "/"); 
爲什麼需要這樣寫呢?原因就是第一個參數是正則表達式,在正則表達式中,“\”也是轉義字符,可以簡單的理解爲,第一個參數需要經過兩次轉義才能將其轉化爲一個普通的字符串,所以就是前兩個反斜槓"\\"經過正則表達式的轉換後變成"\",同理,第三個和第四個經過正則表達式轉換後也變成"\",所以經過第一次轉換後的第一個參數變成“\\”,第二次轉義後就變成了普通的字符"\"而不是轉義字符,
同樣的道理:若有一段字符串:“ab||cd||1234||8569”,這串字符被“||”分隔,若是需要用split解析的話,應該寫成String []strs=str.split("\\|\\|");
下表列舉了其他的一些常用轉義字符。

轉義字符
 
意義
ASCII碼值(十進制)
\a
響鈴(BEL)
007
\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位八進制數所代表的任意字符
三位八進制
\xhh
1到2位十六進制所代表的任意字符
二位十六進制
注意:區分,斜槓:"/" 與 反斜槓:"\" ,此處不可互換

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章