Java Sting類關於split處理空串以及擷取最大數

Penny-聽海發表於2018-04-24
  java的String類中有個split方法,這個是我們經常使用到的。


 split一共有兩個方法, 

 ①.public String[] split(String regex,int limit) 


 ②. public String[] split(String regex ) 


  先說第一個,有兩個引數,api上的例子:


public String[] split(String regex,int limit) 

        根據匹配給定的正規表示式來拆分此字串。 
        
        此方法返回的陣列包含此字串的每個子字串,這些子字串由另一個匹配給定的表示式的子字串終止或由字串結束來終止。 
        
        陣列中的子字串按它們在此字串中的順序排列。如果表示式不匹配輸入的任何部分,則結果陣列只具有一個元素,即此字串。 

         limit 引數控制模式應用的次數,因此影響結果陣列的長度。如果該限制 n 大於 0,則模式將被最多應用 n - 1 次,陣列的長度將不會大於 n,而且陣列的最後項將包含超出最後匹配的定界符的所有輸入。 


        如果 n 為非正,則模式將被應用盡可能多的次數,而且陣列可以是任意長度。如果 n 為零,則模式將被應用盡可能多的次數,陣列可有任何長度,並且結尾空字串將被丟棄。 

       

         例如,字串 "boo:and:foo" 使用這些引數可生成下列結果: 


             Regex    Limit     結果 

                :         2         { "boo", "and:foo" } 

                :         5         { "boo", "and", "foo" } 

                :        -2         { "boo", "and", "foo" } 

                o       5         { "b", "", ":and:f", "", "" } 

                o      -2         { "b", "", ":and:f", "", "" } 

                o         0         { "b", "", ":and:f" } 


        這種形式的方法呼叫 str.split(regex, n) 產生與以下表示式完全相同的結果: 
        Pattern.compile(regex).split(str, n) 

        引數: 
            regex - 定界正規表示式 
            limit - 結果閾值,如上所述 

        返回: 
            字串陣列,根據給定正規表示式的匹配來拆分此字串,從而生成此陣列 


        丟擲: 

            PatternSyntaxException - 如果正規表示式的語法無效 


 其實上面說的已經很詳細了,說到底就是比常用的多了一個limit引數。但是引數怎麼用。


        1.當引數為整數的時候,只需要擷取前幾個,需要幾個擷取幾個,這個不用多說。 

       String line = "aa,bb,cc,dd,,,,";  
       System.out.println(line.split(",",6).length);  
       輸出結果為6,limit引數指定幾個,輸出幾個,最多為8個  


        2.當引數為零的時候,和split()一樣,截圖儘可能多的字串(其實不是最多的)。 

        String line = "aa,bb,cc,dd,,,,";  
        System.out.println(line.split(",",0).length);  
        輸出結果為4  


        3.當引數為負的時候,即使後面有空的串,也會輸出到最大 

        String line = "aa,bb,cc,dd,,,,";  
        System.out.println(line.split(",",-1).length);  
        輸出結果為8  


        可能大家都看出來了,以逗號切割的一般都是CSV格式的檔案,當遇到讀取每一行記錄的時候,不加引數,就會遇到這種情況,讀取不完整,然後CSV資料格式驗證的時候,驗證資料不合法。 

       String line = "aa,bb,cc,dd,,,,";      
       String mi[] = (line).split(sp);           
       if (mi.length != 8)return;  

       實際結果 mi.length = 4,所以通不過驗證直接非法資料  



        ②其實就是當limit引數為0的時候獲得的結果,將api的介紹放上來,就不多說了。 

        public String[] split(String regex) 


        根據給定的正規表示式的匹配來拆分此字串。 


        該方法的作用就像是使用給定的表示式和限制引數 0 來呼叫兩引數 split 方法。因此,結果陣列中不包括結尾空字串。 


        例如,字串 "boo:and:foo" 產生帶有下面這些表示式的結果: 


        Regex 結果 
        :         { "boo", "and", "foo" } 

        o         { "b", "", ":and:f" } 



        引數: 
            regex - 定界正規表示式 


        返回: 
            字串陣列,根據給定正規表示式的匹配來拆分此字串,從而生成此陣列。 


        丟擲: 

            PatternSyntaxException - 如果正規表示式的語法無效 



相關文章