日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 分割字符串的方法String.split()底层原理

發布時間:2025/3/21 java 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()底层原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。