2015-05-28 18 views
6

Używam String.split(), aby podzielić ciąg znaków. Ciąg otrzymam ma taką strukturę:Jak zezwolić na puste ciągi w String.split()?

[data]<US>[data]<US> 

gdzie <US> jest separatorem jednostka ASCII (kod 0x1F). Kod do rozłamu jest

String[] fields = someString.split(String.valueOf(0x1f)); 

Działa to dobrze, chyba [DATA] jest pustym ciągiem. W takim przypadku dane są po prostu pomijane.

chcę ciąg jak [DATA]<US><US>[DATA]<US> zwracać tablicę z trzech elementów: [DATA], null i [DATA].

Jak mogę to zrobić?

Odpowiedz

8

Jeśli parametrize swoją split z -1 jako drugi argument, dostaniesz pusty String gdzie [data] brakuje (ale nie null).

someString.split(String.valueOf(0x1f), -1); 

Objaśnienie z docs

Jeśli n nie jest pozytywny, to próbka będzie stosowana tak często, jak to możliwe, a tablica może mieć dowolną długość.

.. gdzie n jest ograniczeniem, tj. Drugim argumentem.

0

Jest to kod pracujących

String s="[DATA]<US><US>[DATA]<US>"; 
String arr []= s.split("<US>"); 
for(String str :arr) { 
    if(str.equals("")) { 
     System.out.println("null"); 
    } else { 
     System.out.println(str); 
    }  
} 

Wyjście ::

[DATA] 
null 
[DATA] 

Aby być bardziej szczegółowe, jak na swoje wymagania:

public String [] format(String s) {  
     String arr []= s.split("<US>");  
     for(int i=0;i<arr.length;i++) 
     { 
      if(arr[i].equals("")) 
      { 
       arr[i]=null; 
      }   
     } 
     return arr; 
    } 
+0

Chodzi mi o to, że to w rzeczywistości nie działa. Nie ma pustych ciągów, gdy nie podano limitu. –

+0

@BartFriederichs Proszę elborate. Co rozumiesz przez brak limitu? – Oliver

+0

Zobacz zaakceptowaną odpowiedź. –

0

Można było po prostu pętla poprzez array następnie i przypisz puste łańcuchy jako wartość null:

public class StringSplitting { 

    public static void main(String[] args){ 

     String inputs = "[data]<US><US>[data]<US>"; 

     String[] fields = inputs.split("<US>"); 


     //set empty values to null 
     for(int i = 0; i < fields.length; i++){ 
      if(fields[i].length() == 0){ 
       fields[i] = null; 
      } 
     } 

     //print output 
     for(String e: fields){ 
      if(e == null){ 
       System.out.println("null"); 
      }else{ 
       System.out.println(e); 
      } 
     } 
    } 
} 
Powiązane problemy