在Java程式中,由於系統類庫的支援,分割字串變得很容易,但是,在使用spilt方法時,有些細節不容忽視。當使用"|"、"+"、"?"、"\"、"*"、"^"、"."等特殊字元分割字串時,若不進行特殊字元的轉義,將得不到正確的結果,有些還會報錯。仔細研究API中spilt方法的介紹,才知曉其中原委。API中的描述,public String[] spilt(String regex),從引數名即可看出,方法傳入的引數不是任意的字串,而是正規表示式,spilt方法實質上是呼叫的matcher類的spilt方法,而"+"、"?"、"\"、"*"、"^"、"."、"$"等這些字元在正規表示式中都有特殊的意義,使用的時候需要對其進行轉義,如下程式碼是個簡單的分割字串的方法:
public List<String> spiltString(String srcString, String c) { List<String> destString = new ArrayList<String>(); if (srcString == null || c == null) { return null; } else { // 特殊字元需轉義 if ("\\".equals(c)) { c = "\\\\"; } else { String rex = "[*+?|.$^]"; Pattern pattern = Pattern.compile(rex); Matcher mat = pattern.matcher(c); if (mat.matches()) { // 特殊字元需轉義 c = "\\" + c; } } String[] temp = srcString.split(c); for (String str : temp) { if (!str.equals("")) { destString.add(str); } } return destString; } }
要注意的是,"\"轉義時要寫成"\\\\",“+”轉義時要寫成“\\+","*"轉義時要寫成”\\*",以上只是用一個字元進行分割,多個字元的拆分方法類似
具體例項:
【1】單個符號作為分隔符 String address="上海|上海市|閔行區|吳中路"; String[] splitAddress=address.split("\\|"); //如果以豎線為分隔符,則split的時候需要加上兩個斜槓【\\】進行轉義 System.out.println(splitAddress[0]+splitAddress[1]+splitAddress[2]+splitAddress[3]); String address="上海*上海市*閔行區*吳中路"; String[] splitAddress=address.split("\\*"); System.out.println(splitAddress[0]+splitAddress[1]+splitAddress[2]+splitAddress[3]); String address="上海:上海市:閔行區:吳中路"; String[] splitAddress=address.split("\\:"); System.out.println(splitAddress[0]+splitAddress[1]+splitAddress[2]+splitAddress[3]); String address="上海.上海市.閔行區.吳中路"; String[] splitAddress=address.split("\\."); System.out.println(splitAddress[0]+splitAddress[1]+splitAddress[2]+splitAddress[3]); String address="上海^上海市^閔行區^吳中路"; String[] splitAddress=address.split("\\^"); System.out.println(splitAddress[0]+splitAddress[1]+splitAddress[2]+splitAddress[3]); String address="上海@上海市@閔行區@吳中路"; String[] splitAddress=address.split("@"); System.out.println(splitAddress[0]+splitAddress[1]+splitAddress[2]+splitAddress[3]); String address="上海,上海市,閔行區,吳中路"; String[] splitAddress=address.split(","); System.out.println(splitAddress[0]+splitAddress[1]+splitAddress[2]+splitAddress[3]); 【2】多個符號作為分隔符 String address="上海^上海市@閔行區#吳中路"; String[] splitAddress=address.split("\\^|@|#"); System.out.println(splitAddress[0]+splitAddress[1]+splitAddress[2]+splitAddress[3]);
輸出格式:上海上海市閔行區吳中路
總結:
(1)split表示式,其實就是一個正規表示式。* ^ | 等符號在正規表示式中屬於一種有特殊含義的字元,如果使用此種字元作為分隔符,必須使用轉義符即\\加以轉義。
(2)如果使用多個分隔符則需要藉助 | 符號,如【2】所示,但需要轉義符的仍然要加上分隔符進行處理。