Java 分割字符串的方法String.split()底层原理
文章目錄
- 1.舉例說明
- 2.split源碼分析
- 3.API原解
- 4.regex參數API原解
- 5.limit參數介紹
- 6.結果的驗證
- 7.此方法的使用
1.舉例說明
(例子來自于博主:https://blog.csdn.net/java_zhangshuai/article/details/80086857)
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,我也會在后面說2.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) {具體實現... }3.API原解
此方法返回的數組包含此字符串的每個子字符串,這些子字符串由給定表達式匹配的另一個子字符串終止,或在字符串結尾處終止,數組中的子字符串按它們在此字符串中出現的順序排列,如果表達式與輸入的任何部分都不匹配,則結果數組只有一個元素,即此字符串。
上面這段話你可能會很蒙,看一下下面的例子你就明白了
注意:(空字符串也是一個字符串)
4.regex參數API原解
將此字符串拆分為給定正則表達式的匹配項。
5.limit參數介紹
api是這樣說的:
(1)limit參數控制應用模式的次數,因此影響結果數組的長度
(2)如果限制n大于零,則模式將最多應用n-1次,數組的長度將不大于n,數組的最后一項將包含最后一個匹配分隔符以外的所有輸入
(3)如果n為非正數,則模式將被應用盡可能多次,并且數組可以具有任何長度
(4)如果n為零,則將盡可能多次應用該模式,數組可以有任何長度,并且將丟棄尾隨的空字符串。
簡單的理解為:
limit 參數通過控制分割次數從而影響分割結果
如果傳入 limit (limit >0) 那么字符串最多被分割 limit -1 次,分割得到數組長度最大是 limit ,數組的最后一項將包含最后一個匹配分隔符以外的所有輸入(這句話的解釋看后面的例子,很重要)
如果 limit = -1 將會以最大分割次數分割
如果 limit = 0 將會以最大分割次數分割,但是分割結果會丟棄尾隨的所有空字符串
6.結果的驗證
(1)我們先介紹一下limit=0的時候
public class split {public static void main(String args[]) {String line = ",aa,bcd,eef,,ss,";String[] split = line.split(",",0);System.out.println(split.length);} }dubug之后
結果證明,尾隨的空字符串被丟棄,那我們繼續證明到底是不是所有的尾隨字符串都被丟棄
上代碼:
public class split {public static void main(String args[]) {String line = ",aa,bcd,eef,,ss,,";String[] split = line.split(",",0);System.out.println(split.length);} }dubug之后
果然,盡可能大的分割,最后的兩個空字符串都被丟棄了
(2)limit=4的時候
public class split {public static void main(String args[]) {String line = ",aa,bcd,eef,,ss,,";String[] split = line.split(",",4);System.out.println(split.length);} }dubug之后
結果驗證了上面的那句話數組的最后一項將包含最后一個匹配分隔符以外的所有輸入
因為最多分割limit-1次,所以找到分割到第三次時的",",包含后面的所有輸入
(3)limit=-1的時候
public class split {public static void main(String args[]) {String line = ",aa,bcd,eef,,ss,,";String[] split = line.split(",",-1);System.out.println(split.length);} }dubug之后
結果證明 limit = -1 將會以最大分割次數分割
7.此方法的使用
如果用“.”作為分隔的話,必須是如下寫法:String.split("\."),這樣才能正確的分隔開,不能用String.split(".");
2、如果用“|”作為分隔的話,必須是如下寫法:String.split("\|"),這樣才能正確的分隔開,不能用String.split("|");
“.”和“|”前面必須加\\才可以起到轉義的作用。
3、如果在一個字符串中有多個分隔符,可以用“|”作為連字符,比如:“a=1 and b =2 or c=3”,把三個都分隔出來,可以用String.split(“and|or”);
我們來看個例子:
String words[]=str.split("\\s+|\\.");這個是很么意思呢?
使用一個或多個空格分隔和用逗號分隔
解釋如下:
s表示 空格,回車,換行等空白符
+號表示一個或多個的意思
|表示分隔符
使用的時候記得加上兩個斜杠哦
參考博客:https://blog.csdn.net/java_zhangshuai/article/details/80086857
總結
以上是生活随笔為你收集整理的Java 分割字符串的方法String.split()底层原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 越不服务器显示异常什么原因,计算机异常问
- 下一篇: Java Arrays.sort()的几