Java中String的split()方法的一些需要注意的地方


項目中我用到了字符串的split()方法,為這種方法的方便稱贊,可是程序在測試的時候出現的問題折騰了我好久,原來在使用的時候存在着以下幾個需要注意的地方。
本來使用split()方法是判斷String的數量,結果這么的不靠譜,最后換成了hashset動態添加字符串,然后求hashset.size()的方法得到字符串的個數解決的。。。。
 
 
Java代碼   收藏代碼
  1. public String[] split(String regex, int limit)  

 split函數是用於使用特定的切割符(regex)來分隔字符串成一個字符串數組,這里我就不討論第二個參數(可選)的含義詳見官方API說明

 

我在做項目期間曾經遇到一個“bug”,就是當split函數處理空字符串時,返回數組的數組竟然有值。。。查完API才發現就是這么規定的。

官方API 寫道
If the expression does not match any part of the input then the resulting array has just one element, namely this string.

 原來我不能小看空字符串,它也是字符串的一種,當split函數沒有發現匹配的分隔符時,返回數組就只包含一個元素(該字符串本身)。以為這樣就結束了,幸虧我做了幾個試驗,忽然又發現了一些問題,代碼如下:

Java代碼   收藏代碼
  1. public class Split {  
  2.   
  3.     public static void main(String[] args) {  
  4.         String str1 = "a-b";          
  5.         String str2 = "a-b-";  
  6.         String str3 = "-a-b";  
  7.         String str4 = "-a-b-";  
  8.         String str5 = "a";  
  9.         String str6 = "-";  
  10.         String str7 = "--";  
  11.         String str8 = "";   //等同於new String()  
  12.           
  13.         getSplitLen(str1);  
  14.         getSplitLen(str2);  
  15.         getSplitLen(str3);  
  16.         getSplitLen(str4);  
  17.         getSplitLen(str5);  
  18.         getSplitLen(str6);  
  19.         getSplitLen(str7);  
  20.         getSplitLen(str8);  
  21.     }  
  22.       
  23.     public static void getSplitLen(String demo){  
  24.         String[] array = demo.split("-");  
  25.         int len = array.length;  
  26.         System.out.print("\"" + demo + "\"長度為:" + len);  
  27.         if(len >= 0){  
  28.             for(int i=0; i<len; i++){  
  29.                 System.out.print(" \""+array[i]+"\"");  
  30.             }             
  31.         }  
  32.         System.out.println();  
  33.     }  
  34.   
  35. }  

 運行結果:

"a-b"長度為:2 "a" "b"
"a-b-"長度為:2 "a" "b"
"-a-b"長度為:3 "" "a" "b"
"-a-b-"長度為:3 "" "a" "b"
"a"長度為:1 "a"
"-"長度為:0
"--"長度為:0
""長度為:1 ""

 

和我想的還是不大一樣,因為不知道源碼也不知道具體是怎么實現的,我的理解如下:

  1. 當字符串只包含分隔符,返回數組沒有元素;
  2. 當字符串不包含分隔符時,返回數組只包含一個元素(該字符串本身);
  3. 字符串最尾部出現的分隔符可以看成不存在,不影響字符串的分隔;
  4. 字符串最前端出現的分隔符將分隔出一個空字符串以及剩下的部分的正常分隔;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM