9
votes

Comment un StringBuilder peut-il être mis à convertir à une chaîne []?

Le code suivant en sorte que le code fonctionne, mais corrige le nombre d'éléments dans la chaîne []. Y a-t-il un moyen de faire une chaîne [] Ajouter le nombre d'éléments nécessaires de manière dynamique?

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;
}


1 commentaires

Cela aiderait vraiment si vous expliqueriez comment vous voulez que le texte soit brisé. J'ai fabriqué des hypothèses sur la base du code, mais une description aurait été belle.


6 Réponses :


21
votes

Vous essayez simplement de scinder sur l'onglet? Du: XXX

Notez que Split prend un motif d'expression régulier - alors ne vous attendez pas à divisé (".") pour diviser juste sur des points, par exemple:)


2 commentaires

Ma réponse est condamnée! Great @jonskeet a répondu trois secondes avant que je sache. :-) Lisez votre livre Jon. C'est génial.


Parfait! Besoin que de cette ligne. Et oui, onglet est \ t. Mille mercis.



2
votes

Vous pouvez utiliser la méthode de chaîne divisé pour le faire en une ligne.


0 commentaires

4
votes

Pour agrandir dynamiquement une matrice, utilisez arraylist code>, vous pouvez même convertir le résultat à la chaîne [] code> si c'est ce que votre API nécessite.

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


0 commentaires

1
votes

Vous pouvez utiliser une implémentation récursive pour utiliser la pile de programmes comme une matrice temporaire.

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;
}


1 commentaires

Pas pratique. Si l'entrée StringBuilder est assez grande, vous aurez déborder la pile.



-4
votes
StringBuilder t= new StringBuilder();

String s= t.toString();

0 commentaires

0
votes

chaîne myLocation = constructeur.tostring ();


0 commentaires