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

Java切割字符串的踩坑實(shí)戰(zhàn)記錄

 更新時(shí)間:2022年11月09日 10:44:09   作者:小的~~  
最近在項(xiàng)目中使用了java中的分割字符串,踩了一個(gè)坑,充分了展示了自己對(duì)java底層的認(rèn)知有很多的不足和欠缺,下面這篇文章主要給大家介紹了關(guān)于Java切割字符串的踩坑實(shí)戰(zhàn)記錄,需要的朋友可以參考下

坑出現(xiàn)的環(huán)境

一般情況下切割字符串會(huì)使用split或者StringTokenizer,如下代碼

String s = ",,o,,";
String[] split = s.split(",");

期望得到數(shù)組["","","o","",""],但是實(shí)際上會(huì)得到["","","o"],后面兩個(gè)直接被忽略了,如IDEA運(yùn)行

 StringTokenizer默認(rèn)情況下

String s = ",,o,,";
StringTokenizer token = new StringTokenizer(s,",");
String[] arr = new String[token.countTokens()];
int i = 0;
while (token.hasMoreElements()){
    arr[i++] = token.nextToken();
}

在IDEA中得到的運(yùn)行結(jié)果

 當(dāng)StringTokenizer第三個(gè)參數(shù)改為true時(shí)

StringTokenizer token = new StringTokenizer(s,",",true);

 貌似得到了想要的結(jié)果,但是當(dāng)要切割的字符串改為下面這樣時(shí)

String s = ",k,o,,";
StringTokenizer token = new StringTokenizer(s,",",true);
String[] arr = new String[token.countTokens()];
int i = 0;
while (token.hasMoreElements()){
    arr[i++] = token.nextToken();
}

得到的結(jié)果是

數(shù)組的數(shù)量與預(yù)期也不符。

實(shí)際上java的split內(nèi)部會(huì)按照預(yù)期的樣子把字符串切割好,但是第二個(gè)參數(shù)不傳的情況下默認(rèn)是0,這就是會(huì)導(dǎo)致后面空字符串的值被丟棄

在String的split方法中可以看到

 從注釋說(shuō)明中可以看到,通過(guò)改變第二個(gè)參數(shù)可以得到預(yù)期的結(jié)果

StringTokenizer內(nèi)部也會(huì)判斷切割后的值長(zhǎng)度是否大于0,大于的情況下才會(huì)存儲(chǔ)起來(lái)

問(wèn)題的解決

通過(guò)設(shè)置split的第二個(gè)參數(shù)為-1

String s = ",k,o,,";
String[] split = s.split(",",-1);

補(bǔ)充:java分割字符串常見(jiàn)語(yǔ)法

一.java.lang.String.split()

在java 默認(rèn)的分隔符是空格("")、制表符(\t)、換行符(\n)、回車(chē)符(\r)

示例:

for(String revaal:s.split(" ")){//用空格分隔
        System.out.println(count+"ci"+revaal);
          }

或者

String sourceStr = "1,2,3,4,5";
String[] sourceStrArray = sourceStr.split(",");
for (int i = 0; i < sourceStrArray.length; i++) {
    System.out.println(sourceStrArray[i]);
}

如果需要指定分割后的數(shù)量的話,可以在split方法中再傳入指定數(shù)量即可。

String[] sourceStrArray = sourceStr.split(",",4);

split 的實(shí)現(xiàn)直接調(diào)用的 matcher 類的 split 的方法。在使用String.split方法分隔字符串時(shí),分隔符如果用到一些特殊字符,可能會(huì)得不到我們預(yù)期的結(jié)果。在正則表達(dá)式中有特殊的含義的字符,我們使用的時(shí)候必須進(jìn)行轉(zhuǎn)義,

1.字符"|","*","+“都得加上轉(zhuǎn)義字符,前面加上”\"。

2.而如果是"",那么就得寫(xiě)成"\\"。

3.如果一個(gè)字符串中有多個(gè)分隔符,可以用"|"作為連字符。

二.java.util.StringTokenizer()

StringTokenizer 構(gòu)造方法:

  1. StringTokenizer(String str) :構(gòu)造一個(gè)用來(lái)解析 str 的 StringTokenizer 對(duì)象。java 默認(rèn)的分隔符是空格("")、制表符(\t)、換行符(\n)、回車(chē)符(\r)。
  2. StringTokenizer(String str, String delim) :構(gòu)造一個(gè)用來(lái)解析 str 的 StringTokenizer 對(duì)象,并提供一個(gè)指定的分隔符。
  3. StringTokenizer(String str, String delim, boolean returnDelims) :構(gòu)造一個(gè)用來(lái)解析 str 的 StringTokenizer 對(duì)象,并提供一個(gè)指定的分隔符,同時(shí),指定是否返回分隔符。

示例:

 public static void main(String[] args)
    { 
        String str = "runoob,google,taobao,facebook,zhihu";
        // 以 , 號(hào)為分隔符來(lái)分隔字符串
        StringTokenizer st=new StringTokenizer(str,",");
        while(st.hasMoreTokens()) { 
            System.out.println(st.nextToken());
        }
    }

StringTokenizer 常用方法:

  1. int countTokens():返回nextToken方法被調(diào)用的次數(shù)。
  2. boolean hasMoreTokens():返回是否還有分隔符。
  3. boolean hasMoreElements():判斷枚舉 (Enumeration) 對(duì)象中是否還有數(shù)據(jù)。
  4. String nextToken():返回從當(dāng)前位置到下一個(gè)分隔符的字符串。
  5. Object nextElement():返回枚舉 (Enumeration) 對(duì)象的下一個(gè)元素。
  6. String nextToken(String delim):與 4 類似,以指定的分隔符返回結(jié)果。

總結(jié)

到此這篇關(guān)于Java切割字符串踩坑的文章就介紹到這了,更多相關(guān)Java切割字符串的坑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實(shí)現(xiàn)砸金蛋抽獎(jiǎng)功能

    java實(shí)現(xiàn)砸金蛋抽獎(jiǎng)功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)砸金蛋抽獎(jiǎng)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 如何使用JAVA調(diào)用SHELL

    如何使用JAVA調(diào)用SHELL

    這篇文章主要介紹了如何使用JAVA調(diào)用SHELL,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Mybatis Mybatis-Plus傳入多個(gè)參數(shù)的處理方式

    Mybatis Mybatis-Plus傳入多個(gè)參數(shù)的處理方式

    這篇文章主要介紹了Mybatis Mybatis-Plus傳入多個(gè)參數(shù)的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Spring依賴注入Dependency Injection的三種方式

    Spring依賴注入Dependency Injection的三種方式

    依賴注入(Dependency Injection)和控制反轉(zhuǎn)(Inversion of Control)是同一個(gè)概念。具體含義是:當(dāng)某個(gè)角色(可能是一個(gè)Java實(shí)例,調(diào)用者)需要另一個(gè)角色(另一個(gè)Java實(shí)例,被調(diào)用者)的協(xié)助時(shí),在傳統(tǒng)的程序設(shè)計(jì)過(guò)程中,通常由調(diào)用者來(lái)創(chuàng)建被調(diào)用者的實(shí)例
    2023-02-02
  • 關(guān)于java后端的詳解

    關(guān)于java后端的詳解

    在本篇文章里小編給各位分享的是關(guān)于java后端的知識(shí)點(diǎn)詳解,學(xué)習(xí)java的朋友們可以參考下。
    2019-08-08
  • MybatisPlus,無(wú)XML分分鐘實(shí)現(xiàn)CRUD操作

    MybatisPlus,無(wú)XML分分鐘實(shí)現(xiàn)CRUD操作

    這篇文章主要介紹了MybatisPlus,無(wú)XML分分鐘實(shí)現(xiàn)CRUD操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • Java中數(shù)組和List的互相轉(zhuǎn)換問(wèn)題小結(jié)

    Java中數(shù)組和List的互相轉(zhuǎn)換問(wèn)題小結(jié)

    這篇文章主要介紹了Java中數(shù)組和List的互相轉(zhuǎn)換問(wèn)題小結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-03-03
  • java計(jì)算π的多種方法

    java計(jì)算π的多種方法

    這篇文章主要介紹了使用java計(jì)算π的多種方法,代碼詳細(xì),邏輯清晰,對(duì)于算法思路可能有所幫助,需要的朋友可以參考下
    2021-04-04
  • idea解決程序包不存在報(bào)錯(cuò)的八種解決方法

    idea解決程序包不存在報(bào)錯(cuò)的八種解決方法

    這篇文章主要介紹了idea解決程序包不存在報(bào)錯(cuò)的八種解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-02-02
  • 一篇文章搞定數(shù)據(jù)庫(kù)連接池

    一篇文章搞定數(shù)據(jù)庫(kù)連接池

    數(shù)據(jù)庫(kù)連接池在編寫(xiě)應(yīng)用服務(wù)是經(jīng)常需要用到的模塊,太過(guò)頻繁的連接數(shù)據(jù)庫(kù)對(duì)服務(wù)性能來(lái)講是一個(gè)瓶頸,使用緩沖池技術(shù)可以來(lái)消除這個(gè)瓶頸,本文就來(lái)介紹Java常見(jiàn)的幾種,感興趣的可以了解一下
    2021-07-07

最新評(píng)論