2012-01-01 34 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); 
     } 
    } 
}