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

String.split() Выход из выше : : : : bbИспользование метода

Что именно происходит, когда раскол() делает раскол, но нет ничего между расколом, как в приведенном выше примере. Является ли значение (в массиве) классифицированным как null или пустая строка или что-то еще?

Я ожидал, что содержимое массива будет {bb}, потому что остальная часть строки ничего не возвращает между разделом.

Меня действительно интересовало, почему оно хранит пустую строку в массиве, а не только сохраняет возвращаемые значения, т. Е. Bb.

Благодаря

+8

У вас есть весь код, чтобы убедиться в том, что сами прямо там ... – Mat

+0

Нет оно не сказать мне, почему это хранение аннулирует следовательно, почему я задал этот вопрос. – ziggy

+0

Он не хранит нули, а документация сообщает вам, что происходит - в JavaDocs есть примеры для этой функции. – Mat

ответ

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); 
     } 
    } 
} 
Смежные вопросы