欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中String.split()的最詳細(xì)源碼解讀及注意事項(xiàng)

 更新時(shí)間:2022年07月26日 13:14:10   作者:Killing?Vibe  
以前經(jīng)常使用String.split()方法,但是從來沒有注意,下面這篇文章主要給大家介紹了關(guān)于Java中String.split()最詳細(xì)源碼解讀及注意事項(xiàng)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下

前言

博主針對(duì)字符串分割時(shí)出現(xiàn)的各種空字符串問題,進(jìn)入String類的源碼看了一下,現(xiàn)作如下解讀及演示:

一、split(regex,limit)

首先是帶有兩個(gè)參數(shù)的split方法:

作用:

將以給定正則表達(dá)式(regex)的字符串分隔開來

  • 第一個(gè)參數(shù)是傳入字符類型的分隔符,如 “,” 等(可以是任何字符串)
  • 第二個(gè)參數(shù)傳入整型的limit,代表的是將此字符串分割成n部分(這里的n就是limit).

返回值:

此方法返回的數(shù)組包含此字符串的每個(gè)子字符串,這些子字符串以匹配到的正則表達(dá)式(就是以輸入的第一個(gè)參數(shù)regex)作為結(jié)束,或由字符串的結(jié)尾作為結(jié)束。

注意事項(xiàng):

  1. 數(shù)組中的子字符串按照它們?cè)谶@個(gè)字符串中出現(xiàn)的順序排列。
  2. 如果輸入的regex不匹配字符串里面的任何字符,那么結(jié)果數(shù)組只有一個(gè)元素,即這個(gè)字符串。(就是若字符串里面沒有出現(xiàn)輸入的regex參數(shù))
  3. 如果在字符串的開頭有一個(gè)正數(shù)的匹配(就是字符串開頭有>0個(gè)的regex分隔符),那么在結(jié)果數(shù)組的開頭會(huì)包含一個(gè)空的前導(dǎo)子字符串.
public class test {
    public static void main(String[] args) {
        String str = ",,1,2,3,4"; // 注意這里字符串開頭就匹配到了逗號(hào)
        String[] s = str.split(",",10);// 這里先取10,后文介紹第二個(gè)參數(shù)
        for (String string : s) {
            System.out.println("子字符串"+string);
        }
        System.out.println(s.length);
    }

}

運(yùn)行結(jié)果:

第一個(gè)逗號(hào)前面會(huì)有出現(xiàn)一個(gè)空的子字符串

limit參數(shù)控制應(yīng)用模式的次數(shù),因此會(huì)影響結(jié)果數(shù)組的長(zhǎng)度。(這里的意思就是limit的取值控制了結(jié)果數(shù)組的長(zhǎng)度)

對(duì)以上解讀如下: (1) 如果limit輸入的是一個(gè)正數(shù), 那么該模式將最多應(yīng)用limit - 1次(就是說只會(huì)用輸入的regex去字符串里面匹配limit-1次),數(shù)組的長(zhǎng)度將不大于limit,并且數(shù)組的最后一個(gè)條目將包含最后一個(gè)匹配的分隔符之外的所有輸入(就是說他分隔的模式是從前逐個(gè)往后的).給個(gè)代碼便于大家理解:

public class test {
    public static void main(String[] args) {
        String str = "1,2,3,4";
        String[] s = str.split(",",2);//這里輸入limit為2,即分成2部分
        for (String string : s) {
            System.out.println("子字符串"+string);
        }
        System.out.println(s.length);
    }

}

運(yùn)行結(jié)果:

字符串被分隔成2個(gè)子字符串,分隔模式是從前往后的

(2) 如果輸入的limit為,則模式將被應(yīng)用盡可能多的次數(shù),結(jié)果數(shù)組可以有任何長(zhǎng)度,而尾部的空字符串將被丟棄. (就是匹配字符串里面所有的regex分隔符),關(guān)于空字符串被丟棄,代碼如下:

public class test {
    public static void main(String[] args) {
        String str = "1,2,3,4,,,";// 這里后面逗號(hào)之間的空字符串將被丟棄
        String[] s = str.split(",",0);
        for (String string : s) {
            System.out.println("子字符串"+string);
        }
        System.out.println(s.length);
    }

}

運(yùn)行結(jié)果:

尾部的空字符串將不會(huì)出現(xiàn)在結(jié)果數(shù)組里

(3) 如果輸入limit的值為負(fù)數(shù),則模式將被應(yīng)用盡可能多的次數(shù),數(shù)組可以有任何長(zhǎng)度。(尾部的空字符串也不會(huì)被丟失噢)

public class test {
    public static void main(String[] args) {
        String str = ",1,2,3,4,";
        String[] s = str.split(",",-1);//limit值為負(fù)數(shù)
        for (String string : s) {
            System.out.println("子字符串"+string);
        }
        System.out.println(s.length);
    }

}

運(yùn)行結(jié)果:

字符串的尾部空字符串不會(huì)被丟失

二、split(regex)

接下來只帶有一個(gè)參數(shù)的split方法就容易了,就是默認(rèn)limit的值為0.

該方法的工作原理就是用給定regex參數(shù)和一個(gè)limit參數(shù)默認(rèn)為0來調(diào)用兩個(gè)參數(shù)的split方法。因此,結(jié)果數(shù)組中不包含尾隨的空字符串。

總結(jié)

到此這篇關(guān)于Java中String.split()的最詳細(xì)源碼解讀及注意事項(xiàng)的文章就介紹到這了,更多相關(guān)java String.split()源碼解讀內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot使用Spring?Cache高效處理緩存數(shù)據(jù)

    SpringBoot使用Spring?Cache高效處理緩存數(shù)據(jù)

    Spring?Cache是一個(gè)框架,只要簡(jiǎn)單加一個(gè)注解,就能實(shí)現(xiàn)緩存功能,本文主要介紹了SpringBoot使用Spring?Cache高效處理緩存數(shù)據(jù),感興趣的可以了解一下
    2023-11-11
  • Java中如何使用正則表達(dá)式提取各種類型括號(hào)中的內(nèi)容

    Java中如何使用正則表達(dá)式提取各種類型括號(hào)中的內(nèi)容

    最近在工作中遇到一個(gè)問題,就是需要一個(gè)字符串中每一個(gè)中括號(hào)里的內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于Java中如何使用正則表達(dá)式提取各種類型括號(hào)中的內(nèi)容,需要的朋友可以參考下
    2023-06-06
  • 解決若依pageHelper在動(dòng)態(tài)切換數(shù)據(jù)源問題

    解決若依pageHelper在動(dòng)態(tài)切換數(shù)據(jù)源問題

    這篇文章主要介紹了解決pageHelper在動(dòng)態(tài)切換數(shù)據(jù)源問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Springboot實(shí)現(xiàn)ENC加密的詳細(xì)流程

    Springboot實(shí)現(xiàn)ENC加密的詳細(xì)流程

    在項(xiàng)目開發(fā)過程中,需要配置數(shù)據(jù)庫連接密碼、Redis密碼、網(wǎng)盤上傳的AK/SK等敏感信息,都需要保存在配置文件里,或者配置中心,這些信息如果泄露,還是會(huì)造成一定的困擾,下面這篇文章主要給大家介紹了關(guān)于Springboot實(shí)現(xiàn)ENC加密的詳細(xì)流程,需要的朋友可以參考下
    2023-06-06
  • Redis在springboot中的使用教程

    Redis在springboot中的使用教程

    這篇文章主要介紹了Redis在springboot中的使用教程,本文實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-06-06
  • SpringBoot+Shiro學(xué)習(xí)之密碼加密和登錄失敗次數(shù)限制示例

    SpringBoot+Shiro學(xué)習(xí)之密碼加密和登錄失敗次數(shù)限制示例

    本篇文章主要介紹了SpringBoot+Shiro學(xué)習(xí)之密碼加密和登錄失敗次數(shù)限制示例,可以限制登陸次數(shù),有興趣的同學(xué)可以了解一下。
    2017-03-03
  • Java超詳細(xì)分析繼承與重寫的特點(diǎn)

    Java超詳細(xì)分析繼承與重寫的特點(diǎn)

    繼承是Java面向?qū)ο缶幊讨械囊婚T。繼承是子類繼承父類的特征和行為,或者是繼承父類得方法,使的子類具有父類得的特性和行為。重寫是子類對(duì)父類的允許訪問的方法實(shí)行的過程進(jìn)行重新編寫,返回值和形參都不能改變。就是對(duì)原本的父類進(jìn)行重新編寫,但是外部接口不能被重寫
    2022-05-05
  • 使用java實(shí)現(xiàn)銀行家算法

    使用java實(shí)現(xiàn)銀行家算法

    這篇文章主要為大家詳細(xì)介紹了如何使用java實(shí)現(xiàn)銀行家算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • java計(jì)算百分比值的方法

    java計(jì)算百分比值的方法

    這篇文章主要介紹了java計(jì)算百分比值的方法,涉及java數(shù)值運(yùn)算的技巧,需要的朋友可以參考下
    2015-03-03
  • Java8 CompletableFuture詳解

    Java8 CompletableFuture詳解

    這篇文章主要介紹了Java8 CompletableFuture詳解,CompletableFuture extends Future提供了方法,一元操作符和促進(jìn)異步性以及事件驅(qū)動(dòng)編程模型,需要的朋友可以參考下
    2014-06-06

最新評(píng)論