2010-08-12 3 views
9

Der folgende Code funktioniert, behebt jedoch die Anzahl der Elemente in String []. Gibt es eine Möglichkeit, einen String [] die Anzahl der Elemente dynamisch hinzufügen?Wie kann ein StringBuilder am besten in einen String [] konvertiert werden?

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

Es würde wirklich helfen, wenn Sie erklären würden, * wie * Sie wollen, dass der Text aufgelöst wird. Ich habe Annahmen basierend auf dem Code gemacht, aber eine Beschreibung wäre nett gewesen. –

Antwort

20

Sie versuchen also nur auf Tab zu teilen? Wie wäre es:

return names.toString().split(TAB); 

Beachten Sie, dass split einen regulären Ausdruck Muster braucht - also nicht split(".") erwarten nur auf Punkte, zum Beispiel zu spalten :)

+6

Meine Antwort ist zum Scheitern verurteilt! Great @ JonSkeet hat drei Sekunden vorher geantwortet. :-) Lesen Sie Ihr Buch Jon. Es ist toll. –

+2

Perfekt! Benötigte nur diese eine Zeile. Und ja, TAB ist \ t. Tausend Dank. – jacknad

2

Sie können split, das zu tun String-Methode verwenden, in einem Linie.

4

Zum dynamischen Array wachsen, verwendet ArrayList<String>, man kann sogar das Ergebnis zu String[] konvertieren, wenn das ist, was Ihre API erfordert.

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() ]); 

Das heißt, für Ihre Zwecke split verwenden, wie von anderen vorgeschlagen

+0

Tausend Dank! Große Hilfe. – jacknad

1

Sie können eine rekursive Implementierung verwenden, um die Programm-Stack als temporäres Array zu verwenden.

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

Unpraktisch. Wenn der StringBuilder-Eingang groß genug ist, wird der Stapel überlaufen. –

-4
StringBuilder t= new StringBuilder(); 

String s= t.toString(); 
0

String MyLocation = builder.toString();

Verwandte Themen