2012-01-01 66 views
-3
class ZiggyTest{  

    public static void main(String[] args) { 

     String str = "aaaaaaaaabb"; 
     String [] s = str.split("a{3}"); 

     for(String x : s){ 
      System.out.print(" : " + x); 
     } 
    } 
} 

的上述輸出是: : : : bb使用String.split()方法

當分裂()不會分裂但並沒有什麼在分割之間如在上面的例子中究竟發生什麼。值(在數組中)歸類爲空或空字符串還是別的東西?

我在期待數組的內容是{bb},因爲字符串的其餘部分沒有在分隔符之間返回任何內容。

我真的很關心它爲什麼要在數組中存儲空/空字符串,而不是僅僅存儲返回的值,即bb。

感謝

+8

你已經有了所有的代碼來驗證你自己在那裏... – Mat 2012-01-01 13:55:24

+0

不,它不告訴我爲什麼它存儲空值,因此我問這個問題。 – ziggy 2012-01-01 14:39:41

+0

它不存儲空值,文檔告訴你發生了什麼 - JavaDocs中有這個函數的例子。 – Mat 2012-01-01 14:48:08

回答

2

您可能需要閱讀了關於零寬度匹配分裂。這裏有些例子。試一試。

final public class SplitStr 
{ 
    private static void strDump(String[] arr) 
    { 
     for (String s : arr) { 
      System.out.format("[%s]", s); 
     } 
     System.out.println(); 
    } 

    public static void main(String[] args) 
    { 
     strDump("1,234,567,890".split(",")); 
     // "[1][234][567][890]" 
     strDump("1,234,567,890".split("(?=,)"));  
     // "[1][,234][,567][,890]" 
     strDump("1,234,567,890".split("(?<=,)")); 
     // "[1,][234,][567,][890]" 
     strDump("1,234,567,890".split("(?<=,)|(?=,)")); 
     // "[1][,][234][,][567][,][890]" 

     strDump(":a:bb::c:".split("(?=:)|(?<=:)")); 
     // "[][:][a][:][bb][:][:][c][:]" 
     strDump(":a:bb::c:".split("(?=(?!^):)|(?<=:)")); 
     // "[:][a][:][bb][:][:][c][:]" 
     strDump(":::a::::b b::c:".split("(?=(?!^):)(?<!:)|(?!:)(?<=:)")); 
     // "[:::][a][::::][b b][::][c][:]" 
     strDump("a,bb:::c d..e".split("(?!^)\\b")); 
     // "[a][,][bb][:::][c][ ][d][..][e]" 

     strDump("ArrayIndexOutOfBoundsException".split("(?<=[a-z])(?=[A-Z])")); 
     // "[Array][Index][Out][Of][Bounds][Exception]" 
     strDump("1234567890".split("(?<=\\G.{4})"));  
     // "[1234][5678][90]" 

     // Split at the end of each run of letter 
     strDump("Boooyaaaah! Yippieeee!!".split("(?<=(?=(.)\\1(?!\\1))..)")); 
     // "[Booo][yaaaa][h! Yipp][ieeee][!!]" 
    } 
} 
2

空字符串,如可以通過編輯段將可以更容易地看出:

public class ZiggyTest{  

    public static void main(String[] args) { 

     String str = "aaaaaaaaabb"; 
     String [] s = str.split("a{3}"); 

     System.out.println(s.length); 
     for(String x : s){ 
      if (x==null) 
       System.out.println("NULL HERE"); 
      System.out.print(x); 
     } 
    } 
}