欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

字符串split操作到底有多少坑-創(chuàng)新互聯(lián)

微信公眾號

字符串split操作到底有多少坑
長字符串切分,取其中元素封裝或者將封裝信息組合成長字符串都是常規(guī)操作,但是這種長字符串往往是不可控的,如一個長字符串就是由一個元素組成,或者存在空字符串的元素,看似這并沒有什么問題,但是使用不同工具類的split方法進行切分結果是完全不同的。不知道你是否遇到這樣的坑,下面一起來看看。

10年積累的成都網站制作、成都網站建設經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先做網站后付款的網站建設流程,更有察雅免費網站建設讓你可以放心的選擇與我們合作。

String類自帶的split方法

直接使用String本身自帶的split方法,看對不同字符串的切分結果。

  • 沒有分隔符的字符串

    //str = "1"
    public static void split2(String str) {
      String[] splits = str.split(",");
      for (String split : splits) {
          System.out.println("->" + split);
      }
      System.out.println("數組長度:" + splits.length);
    }

    切分后結果是單個元素["1"],數組長度是1。

  • 有分隔符,分隔符切分后沒有空字符串出現(xiàn)

    //str = "1,2"
    //代碼同上……

    切分后結果是["1","2"],數組長度是2。(假設分隔符是n個,分割后的元素個數是n+1個)

  • 有分隔符,分隔符切分后有空字符串出現(xiàn)

    //str = "1,,2"
    //代碼同上……

    切分后結果是["1","","2"],數組長度是3。(假設分隔符是n個,分割后的元素個數是n+1個)

最終總結不管分隔符有多少個,最終切分的結果都是n+1個元素。也是正常業(yè)務邏輯所需要的。但是這里有一個問題,如果傳入的字符串是null的時候會報NullPointException異常,需要另外加一層非空判斷。

commons提供的StringUtils工具類

具體全限定類名是org.apache.commons.lang3.StringUtils,這個可以說是最常用一個字符串的工具類。如判斷非null、非空字符串或者非空格,用isNotBlank方法,使用集合元素組裝字符串,用join方法等等。現(xiàn)在來看一下split方法在不同的情況下是如何實現(xiàn)。

  • 沒有分隔符的字符串

    //str = "1"
    public static void split1(String str) {
      String[] splits = org.apache.commons.lang3.StringUtils.split(str, ",");
      for (String split : splits) {
          System.out.println("->" + split);
      }
      System.out.println("數組長度:" + splits.length);
    }

    切分后的結果是單個元素["1"],數組長度為1。

  • 有分隔符,分隔符切分后沒有空字符串出現(xiàn)

    //str = "1,2"
    //代碼同上……

    切分后的結果是兩個元素["1","2"],數組長度為2。

  • 有分隔符,分隔符切分后有空字符串出現(xiàn)

    //str = "1,,2"
    //代碼同上……

    切分后的結果和上一種情況結果是一樣的,也是兩個元素["1","2"],數組長度為2。

從這里就可以看的出來問題的所在,當出現(xiàn)空字符串的時候,會自動將空字符串丟棄,只保留非空字符串。但是這里還是需要注意的是如果是空格,也會形成一個元素。比如現(xiàn)在str輸入的是"1, ,2",兩個分隔符間有一個空格,此時就會切分成三個元素。

Spring下util包提供的StringUtils工具類

全限定類名org.springframework.util.StringUtils,這個StringUtils也經常被用到,因為在輸入StringUtils的時候,IDEA自動提示,往往它就是在第一位。那它和上面兩種在split方法上有什么不同呢?

  • 沒有分隔符的字符串

    //str = "1"
    public static void split3(String str) {
      String[] splits = org.springframework.util.StringUtils.split(str, ",");
      for (String split : splits) {
          System.out.println("->" + split);
      }
      System.out.println("數組長度:" + splits.length);
    }

    這個時候對不起,會報NullPointerException異常,也就是這個split方法必須要有分隔符的存在。

  • 有分隔符,分隔符切分后沒有空字符串出現(xiàn)

    //str = "1,2"
    //代碼同上……

    切分后的結果是兩個元素["1","2"],數組長度為2。

  • 有分隔符,分隔符切分后有空字符串出現(xiàn)

    //str = "1,,2"
    //代碼同上……

    切分后的結果是兩個元素["1",",2"],數組長度為2。看到這里可能你會認為我這個數組格式寫錯了,但是實際上第二個元素的確是這樣的,確定無疑。

這個split方法還是很坑的,它會從字符串中找分隔符是否存在,如果不存在直接報錯,如果存在,不管有多少個分隔符,都是以第一個分隔符做切分,最終形成兩個元素。

總結

三個split方法三種不同的切分邏輯,到底在什么時候用那種方式切分就很講究了,因為在開發(fā)過程中因為這個切分出過很多莫名其妙的BUG。我就遇到過兩次。

  • 第一次是使用的org.apache.commons.lang3.StringUtils來切分字符串,字符串內有空字符串存在,導致切割后的元素個數和實際個數不同,準確的來說少了元素,結果代碼中在向另一個字符串占位符中填充數據的時候,總是出現(xiàn)錯位的現(xiàn)象。(如本來應該放在占位符3位置上的字符串出現(xiàn)為空字符串,在切分的時候,3位置的元素實際被拋棄,4位置的元素放在了3的位置)
  • 第二次也是使用的org.apache.commons.lang3.StringUtils來切分字符串,測試一直都是很正常,但是測試一段時間后,發(fā)現(xiàn)報NullPointException,排查后才發(fā)現(xiàn),引入的StringUtils被其他開發(fā)人員換成了org.springframework.util.StringUtils導致的。因為這個字符串可能沒有分隔符。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文名稱:字符串split操作到底有多少坑-創(chuàng)新互聯(lián)
轉載來于:http://chinadenli.net/article46/eojeg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)服務器托管面包屑導航網站設計公司ChatGPT建站公司

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網站建設