最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

 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中得到的運行結(jié)果

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

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

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

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ù)期也不符。

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

在String的split方法中可以看到

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

StringTokenizer內(nèi)部也會判斷切割后的值長度是否大于0,大于的情況下才會存儲起來

問題的解決

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

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

補充:java分割字符串常見語法

一.java.lang.String.split()

在java 默認(rèn)的分隔符是空格("")、制表符(\t)、換行符(\n)、回車符(\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 的實現(xiàn)直接調(diào)用的 matcher 類的 split 的方法。在使用String.split方法分隔字符串時,分隔符如果用到一些特殊字符,可能會得不到我們預(yù)期的結(jié)果。在正則表達(dá)式中有特殊的含義的字符,我們使用的時候必須進(jìn)行轉(zhuǎn)義,

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

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

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

二.java.util.StringTokenizer()

StringTokenizer 構(gòu)造方法:

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

示例:

 public static void main(String[] args)
    { 
        String str = "runoob,google,taobao,facebook,zhihu";
        // 以 , 號為分隔符來分隔字符串
        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) 對象中是否還有數(shù)據(jù)。
  4. String nextToken():返回從當(dāng)前位置到下一個分隔符的字符串。
  5. Object nextElement():返回枚舉 (Enumeration) 對象的下一個元素。
  6. String nextToken(String delim):與 4 類似,以指定的分隔符返回結(jié)果。

總結(jié)

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

相關(guān)文章

  • JSP常用七大動作指令實例解析

    JSP常用七大動作指令實例解析

    這篇文章主要介紹了JSP常用七大動作指令實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Java中HashMap的初始容量設(shè)置方式

    Java中HashMap的初始容量設(shè)置方式

    這篇文章主要介紹了Java中HashMap的初始容量設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 聊聊Controller中RequestMapping的作用

    聊聊Controller中RequestMapping的作用

    這篇文章主要介紹了Controller中RequestMapping的作用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 一文詳解Java線程的6種狀態(tài)與生命周期

    一文詳解Java線程的6種狀態(tài)與生命周期

    一個線程在給定的時間點只能處于一種狀態(tài)。線程可以有6種狀態(tài):New、Runnable、Blocked、Waiting、Timed?waiting和Terminated。本文將詳細(xì)講解這6種狀態(tài),需要的可以參考一下
    2022-05-05
  • 基于eclipse-temurin鏡像部署spring boot應(yīng)用的實現(xiàn)示例

    基于eclipse-temurin鏡像部署spring boot應(yīng)用的實現(xiàn)示例

    本文提供了基于eclipse-temurin鏡像部署Spring Boot應(yīng)用的詳細(xì)實現(xiàn)示例,通過使用Docker鏡像,可以輕松地創(chuàng)建和管理Spring Boot應(yīng)用程序的容器化環(huán)境,感興趣的可以了解一下
    2023-08-08
  • maven工程打包引入本地jar包的實現(xiàn)

    maven工程打包引入本地jar包的實現(xiàn)

    我們需要將jar包發(fā)布到一些指定的第三方Maven倉庫,本文主要介紹了maven工程打包引入本地jar包的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Spring中事務(wù)用法示例及實現(xiàn)原理詳解

    Spring中事務(wù)用法示例及實現(xiàn)原理詳解

    這篇文章主要給大家介紹了關(guān)于Spring中事務(wù)用法示例及實現(xiàn)原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Java中Map集合中的Entry對象用法

    Java中Map集合中的Entry對象用法

    這篇文章主要介紹了Java中Map集合中的Entry對象用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Spring + mybatis + mysql使用事物的幾種方法總結(jié)

    Spring + mybatis + mysql使用事物的幾種方法總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于Spring + mybatis + mysql使用事物的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • springboot實現(xiàn)執(zhí)行sql語句打印到控制臺

    springboot實現(xiàn)執(zhí)行sql語句打印到控制臺

    這篇文章主要介紹了springboot實現(xiàn)執(zhí)行sql語句打印到控制臺的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論

贵定县| 龙州县| 波密县| 富裕县| 水富县| 邳州市| 保康县| 曲麻莱县| 大丰市| 宁河县| 师宗县| 泰宁县| 泸水县| 北辰区| 盘山县| 仙居县| 天水市| 廉江市| 德庆县| 噶尔县| 武邑县| 通江县| 句容市| 竹山县| 上虞市| 通化市| 大同市| 彭水| 榆中县| 桦川县| 舒城县| 恭城| 收藏| 通山县| 壶关县| 临桂县| 镇赉县| 青神县| 安达市| 涪陵区| 星子县|