Java用split函數進行分割字符串

   在java中,咱們經常須要對字符串進行分割,使用split方法把字符串按照指定的分割符進行分割,而後返回字符串數組,下面是string.split的用法實例及注意事項:java

public class StringSplit {正則表達式

    public static void main(String[] args) {算法

        String sourceStr = "1,2,3,4,5";數組

        String[] sourceStrArray = sourceStr.split(",");ide

        for (int i = 0; i < sourceStrArray.length; i++) {性能

            System.out.println(sourceStrArray[i]);測試

        }this

        // 最多分割出3個字符串spa

        int maxSplit = 3;.net

        sourceStrArray = sourceStr.split(",", maxSplit);

        for (int i = 0; i < sourceStrArray.length; i++) {

            System.out.println(sourceStrArray[i]);

        }

    }

}

輸出結果:

27191427_P4t0.jpg輸出結果

split 的實現直接調用的 matcher 類的 split 的方法。在使用String.split方法分隔字符串時,分隔符若是用到一些特殊字符,可能會得不到咱們預期的結果。在正則表達式中有特殊的含義的字符,咱們使用的時候必須進行轉義,示例:

public class StringSplit {

    public static void main(String[] args) {

        String value = "192.168.128.33";

        // 注意要加\\,要不出不來,yeah

        String[] names = value.split("\\.");

        for (int i = 0; i < names.length; i++) {

            System.out.println(names[i]);

        }

    }

}

split分隔符總結

1.字符"|","*","+"都得加上轉義字符,前面加上"\\"。2.而若是是"\",那麼就得寫成"\\\\"。3.若是一個字符串中有多個分隔符,能夠用"|"做爲連字符。

好比:String str = "Java string-split#test",能夠用Str.split(" |-|#")把每一個字符串分開。這樣就把字符串分紅了3個子字符串。

java.util.Tokenizer JDK 1.0 or later

StringTokenizer

StringTokenizer 類容許應用程序將字符串分解爲標記。StringTokenizer 是出於兼容性的緣由而被保留的遺留類(雖然在新代碼中並不鼓勵使用它)。建議全部尋求此功能的人使用 String 的 split 方法或 java.util.regex 包。

代碼示例

 

public class StringSplit {

    public static void main(String[] args) {

        String ip = "192.168.128.33";

        StringTokenizer token=new StringTokenizer(ip,".");  

        while(token.hasMoreElements()){  

         System.out.print(token.nextToken()+"  ");  

        } 

    }

}

可是StringTokenizer對於字符串"192.168..33"的分割,返回的字符串數組只有3個元素,對於兩個分隔符之間的空字符串會忽略,這個要慎重使用。

可是String.split(String.split是用正則表達式匹配,因此不使用KMP字符串匹配算法)用的都是按順序遍歷的算法,時間複雜度O(m*n),較高,因此性能上,StringTokenizer好不少,對於頻繁使用字符串分割的應用,例如etl數據處理,使用StringTokenizer性能能夠提升不少。

小經驗分享:

一、分隔符爲「.」(無輸出),「|」(不能獲得正確結果)轉義字符時,「*」,「+」時出錯拋出異常,都必須在前面加必須得加"\\",如split(\\|); 
二、若是用"\"做爲分隔,就得寫成這樣:String.split("\\\\"),由於在Java中是用"\\"來表示"\"的,字符串得寫成這樣:String Str="a\\b\\c"; 
轉義字符,必須得加"\\"; 
三、若是在一個字符串中有多個分隔符,能夠用"|"做爲連字符,好比:String str="Java string-split#test",能夠用Str.split(" |-|#")把每一個字符串分開;

使用String.split方法時要注意的問題

在使用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("\\|"); 這樣才能獲得正確的字符串結果

 

用豎 * 分隔字符串運行將拋出java.util.regex.PatternSyntaxException異常,用加號 + 也是如此。

String[] aa = "aaa*bbb*ccc".split("*");
//String[] aa = "aaa|bbb|ccc".split("\\*"); 這樣才能獲得正確的字符串結果

 

顯然,+ * 不是有效的模式匹配規則表達式,用"\\*" "\\+"轉義後便可獲得正確的字符串結果。

"|" 分隔串時雖然可以執行,可是卻不是預期的目的,獲得的是每一個字符的分割,而不是字符串,"\\|"轉義後便可獲得正確的字符串結果。

還有若是想在串中使用"\"字符,則也須要轉義.首先要表達"aaaa\bbbb"這個串就應該用"aaaa\\bbbb",若是要分隔就應該這樣才能獲得正確結果:

String[] aa = "aaa\\bbb\\bccc".split("\\\\");


注意當用"."分隔的時候, 要用"[.]" 進行分隔!



PS:JAVA新手交流羣:457036818,歡迎你們來交流JAVA相關問題

相關文章
相關標籤/搜索