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;
}
6 Réponses :
Vous essayez simplement de scinder sur l'onglet? Du: Notez que Split code> prend un motif d'expression régulier - alors ne vous attendez pas à divisé (".") Code> pour diviser juste sur des points, par exemple:) p> p>
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.
Vous pouvez utiliser la méthode de chaîne divisé code> pour le faire en une ligne. P>
Pour agrandir dynamiquement une matrice, utilisez arraylist [] 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( ) ] );
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;
}
Pas pratique. Si l'entrée StringBuilder est assez grande, vous aurez déborder la pile.
StringBuilder t= new StringBuilder(); String s= t.toString();
chaîne myLocation = constructeur.tostring (); p>
Cela aiderait vraiment si vous expliqueriez comment i> vous voulez que le texte soit brisé. J'ai fabriqué des hypothèses sur la base du code, mais une description aurait été belle.