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.