javaSE split用法,你真懂!!

對於Strig類的這個split方法,碰到過多次,參考了很多網上的資料,現在整理總結一下
1:split函數第二個參數的用法
論壇上看到了一個問題,然後興起了對這個函數進一步探究的興趣:
首先,使用只有一個參數的split:
public class SplitTest {   
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
        String str = "what,is,,,,that"; 
        String[] strs = str.split(","); 
        System.out.println(strs.length); 
    } 
 

輸出結果是6;但是,如果字符串變爲
[java] view plaincopy

"what,is,,,,"呢?看起來應該是5,其實不然,對用只有一個參數的函數split,輸出結果是2 
測試代碼: 
<pre name="code" class="java">public class SplitTest { 
 
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
        String str = "what,is,,,,"; 
        String[] strs = str.split(","); 
        System.out.println(strs.length); 
    } 
 

問題來了,如何將
"what,is,,,,"; 
         
這個字符串按照逗號分隔,並且逗號之間沒有內容的就存儲爲空呢?
很簡單,用第二個split函數,將第二個參數設置爲-1就可以了,測試代碼如下:
public class SplitTest { 
 
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
        String str = "what,is,,,,"; 
        String[] strs = str.split(",", -1); 
        System.out.println(strs.length); 
    } 
 

結果爲6;
那麼後邊的這個int類型的參數是幹麼用的?很簡單,設定利用split函數截取字符串,截取的結果的閥值。-1表示無限制,雖然直接用只有一個參數的split函數也是無限制,但是那樣的話,後面如果分隔符之間爲空的話,就不會截取。
二 split方法技巧點
  
在java.lang包中有String.split()方法返回是一個字符型數組,但使用過程中還有一些小技巧。
如執行:"2|33|4".split("|")
出來的結果是:
""
2
|
3
3
|
4
奇怪吧,不過注意看一下API說明還是知道原因的.
 
java.lang.string.split
split 方法
將一個字符串分割爲子字符串,然後將結果作爲字符串數組返回。
stringObj.split([separator,[limit]])
參數
stringObj
必選項。要被分解的 String 對象或文字。該對象不會被 split 方法修改。
separator
可選項。字符串或 正則表達式對象,它標識了分隔字符串時使用的是一個還是多個字符。如果忽略該選項,返回包含整個字符串的單一元素數組。
limit
可選項。該值用來限制返回數組中的元素個數。
說明
split 方法的結果是一個字符串數組,在 stingObj 中每個出現 separator 的位置都要進行分解
 
 
所以正常的寫法是這樣的:
1、如果用“.”作爲分隔的話,必須是如下寫法:String.split("\\."),這樣才能正確的分隔開,不能用String.split(".");
2、如果用“|”作爲分隔的話,必須是如下寫法:String.split("\\|"),這樣才能正確的分隔開,不能用String.split("|");
“.”和“|”都是轉義字符,必須得加"\\";(這裏是利用了java中正則表達式的一個點)
3、如果在一個字符串中有多個分隔符,可以用“|”作爲連字符,比如:“a=1 and b =2 or c=3”,把三個都分隔出來,可以用String.split("and|or");

三 字符串反轉遇到問題引出來的
題目如下:
String str = " i am  a  programmer";其中空格個數分別是1,2,3個
要求按照單詞反轉,也就是最後輸出“programmer   a  am   i"; 空格數分別爲3,2,1。
 
1:用split函數方式:
public static void reverse() { 
String s = "i am  a   programmer"; // 幾個空格的數量分別爲1,2,3 
String[] eg = s.split(" ", -1); 
String result = ""; 
for (int i = eg.length - 1; i > 0; i--) { 
  result += eg[i] + " "; 

result += eg[0]; // 這裏要注意第一個字符的前面是不能增加空格的。否則就多了一個空格,所以從後面往前面遍歷
System.out.println(result); 
        這裏一直有一個模糊點,就是如果對於連續多個空格在一起,但是要求分割的時候只用一個空格,其它的空格還不能刪除,到底怎麼辦?需要看看split函數是怎麼處理的。爲了可視,將空格換作”,“。

String oldStr = "z,,,z"; 
        String[] strs = oldStr.split(","); 
        for(String str:strs) { 
            System.out.println(str); 
        } 
可以改變字符串之間的”,“的個數來查看,從運行結果可以看到,在分割字符串”z,,,z“時,首先把字符串分爲”z“和”,,z“兩個字符串,第二步操作字符串”,,z“,分爲一個空字符串和”,z“字符串,繼續分爲一個空字符串和一個z,最後結果如下:中間兩行是null
z
 
 
z
 
2:不用split函數:
        String oldstr="I am  a   programmer"; 
        int index = oldstr.lastIndexOf(" "); 
        System.out.println(index); 
        while (index >= 0) { 
            System.out.print(oldstr.substring(index + 1) + " "); 
            oldstr = oldstr.substring(0,index); 
            index = oldstr.lastIndexOf(' '); 
        } 
         
        System.out.println(oldstr); 
爲了能清楚的看到運行結果,我們把空格換爲“,”。
viewplainprint?
String oldstr="I,am,,a,,,programmer"; 
        int index = oldstr.lastIndexOf(","); 
        while (index >= 0) { 
            System.out.print(oldstr.substring(index + 1) + ","); 
            oldstr = oldstr.substring(0,index); 
            index = oldstr.lastIndexOf(','); 
            System.out.println(index); 
        } 
這樣的話,裏面有兩點如果不清楚的話就會導致不理解,首先subString(index)方法,是值從第index個字符開始往後的字符串。第二subString(0,index)的字符串不包括index位的字符。


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