2010-08-12 22 views
9

Aşağıdaki kod türleri çalışır, ancak String [] öğelerinin sayısını düzeltir. Bir dizi [] dinamik olarak gereken elemanların sayısını eklemek için bir yol var mı?Bir StringBuilder en iyi nasıl bir String [] haline dönüştürülebilir?

private static StringBuilder names = new StringBuilder(); 
... 
public String[] getNames() { 
    int start = 0; 
    int end = 0; 
    int i = 0; 
    String[] nameArray = {"","","",""}; 

    while (-1 != end) { 
     end = names.indexOf(TAB, start);    
     nameArray[i++] = names.substring(start, end); 
     start = ++end; // The next name is after the TAB 
    } 
    return nameArray; 
} 
+0

Açıklarsanız * nasıl * metnin ayrılmasını istediğinizi * yardımcı olur. Kodu temel alan varsayımlar yaptım, ama bir açıklama güzel olurdu. –

cevap

20

Yani sadece sekme üzerinde bölmeye çalışıyorsunuz? Nasıl hakkında:

split Normal ifade deseni alır Not olduğunu
return names.toString().split(TAB); 

- yani örneğin :) için, noktalar üzerinde sadece bölmek split(".") beklemeyin

+6

Cevabım mahkum oldu! Büyük @JonSkeet yapmadan önce üç saniye cevap verdi. :-) Kitabını oku Jon. Bu harika. –

+2

Mükemmel! Sadece bu bir çizgiye ihtiyaç var. Ve evet, TAB \ t değil. Bir milyona teşekkürler. – jacknad

2

Bunu birinde yapılacak String'in yöntemini split kullanabilirsiniz hat.

4

Diziyi dinamik olarak büyütmek için, ArrayList<String> kullanın, sonucu API'nız gerektiriyorsa, sonucu String[] olarak dönüştürebilirsiniz. başkaları

+0

Bir milyon teşekkürler! Büyük yardım – jacknad

1

Geçici bir dizi olarak programın yığını kullanmak için bir özyinelemeli uygulama kullanabilirsiniz önerdiği gibi amaçlar split kullanmak için, söz konusu

ArrayList<String> namesList = new ArrayList<String>(); 

while (-1 != end) { 
    end = names.indexOf(TAB, start);    
    namesList.add(names.substring(start, end)); 
    start = ++end; // The next name is after the TAB 
} 

return namesList.toArray(new String[ namesList.size() ]); 

.

public String[] getNames() 
{ 
    return getNamesRecursively(names, 0, TAB, 0); 
} 

private static String[] getNamesRecursively(StringBuilder str, int pos, String delimiter, int cnt) 
{ 
    int end = str.indexOf(delimiter, pos); 
    String[] res; 
    if(end >= 0) 
     res = getNamesRecursively(str, end + delimiter.length(), delimiter, cnt + 1); 
    else 
    { 
     res = new String[ cnt + 1 ]; 
     end = str.length(); 
    } 
    res[ cnt ] = str.substring(pos, end); 
    return res; 
} 
+0

Uygulanabilir. StringBuilder girdisi yeterince büyükse, yığının üstüne taşacaksınız. –

-4
StringBuilder t= new StringBuilder(); 

String s= t.toString(); 
0

Yaylı MyLocation = builder.toString();

İlgili konular