String類的split方法詳解


轉載自:
https://blog.csdn.net/java_zhangshuai/article/details/80086857
真正看一個程序員是不是牛逼,重要的還是看他的深度

split用法

先上一個例子:

1.最普通的用法
		String str1 = "aa,bb";
		String[] split1 = str1.split(",");
		System.out.println(split1.length);
		//這個結果是2,都知道的
2.比較普通的用法
		String str2 = "";
		String[] split2 = str2.split(",");
		System.out.println(split2.length);
		//這個結果是1,但部分人會認為這個的結果是0,
		//這個為什么是1,我會在后面說
3.看起來比較奇怪的用法
		String str3 = ",";
		String[] split3 = str3.split(",");
		System.out.println(split3.length);
		//這個結果是0,但部分人會認為結果是1,部分人會認為結果是2.
		//這個又為什么是0,我也會在后面說

split源碼分析

split方法准確的來說有兩個參數(String regex, int limit),只不過平時我們用的,是split的一個重載方法(String regex),默認是把第二個參數設置為0,源碼如下:

public String[] split(String regex) {
        return split(regex, 0);
    }
    
    public String[] split(String regex, int limit) {
		具體實現...
	}

參數解釋—regex

  • 如果表達式不匹配輸入的任何內容,返回的數組只具有一個元素,即此字符串。(尤其注意空字符串這種情況,他也是一個字符串)
  • 可以匹配的情況下,每一個字符串都由另一個匹配給定表達式的子字符串終止,或者由此字符串末尾終止(數組中的字符串按照他們在此字符串出現的順序排列)

參數解釋—limit

該參數用於控制模式匹配使用的次數,可以影響到數組的長度
1.limit>0:
模式匹配將被最多應用n-1次,數組的長度將不會大於n,數組的最后一項將包含所有超出最后匹配的定界符的輸入。
2.limit<0:
模式匹配將應用盡可能多的次數,而且數組的長度是任何長度。
3.lilmit=0:
模式匹配將被應用盡可能多的次數,數組可以是任何長度,並且結尾空字符串將被丟棄。

不同limit值的情況下的split結果驗證

假設有字符串aa,bcd,eef,

  • limit=0,regex=","
String line = ",aa,bcd,eef,,,";
String[] split = line.split(",",0);
System.out.println(split.length);//4
  • limit=2,regex=","
String line = ",aa,bcd,eef,,,";
String[] split = line.split(",",2);
System.out.println(split.length);//2
  • limit=100,regex=","
    總長度被限制成最大100個
    但結果是7個,說明當limit大於0,並且遠大於應該有的長度時,頭部和尾部的逗號都沒有被忽略
String line = ",aa,bcd,eef,,,";
String[] split = line.split(",",100);
System.out.println(split.length);//7
  • limit=-1,regex=","
    結果是7個,說明當limit小於0時,頭部和尾部的逗號都沒有被忽略
String line = ",aa,bcd,eef,,,";
String[] split = line.split(",",100);
System.out.println(split.length);//7


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM