字串分割注意事項

木叔發表於2017-03-02
 
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】所示,但需要轉義符的仍然要加上分隔符進行處理。
 
 

相關文章