Je veux rejoindre une String[]
avec un cordon de colle. Existe-t-il une fonction pour cela ?
Réponses
Trop de publicités?Langage Apache Commons a un StringUtils
qui a une join
qui joindra les tableaux ensemble pour créer un String
.
Par exemple :
StringUtils.join(new String[] {"Hello", "World", "!"}, ", ")
Génère les éléments suivants String
:
Hello, World, !
En Java 8, vous pouvez utiliser
1) API de flux :
String[] a = new String[] {"a", "b", "c"};
String result = Arrays.stream(a).collect(Collectors.joining(", "));
2) nouvelle méthode String.join : http://stackoverflow.com/a/21756398/466677
3) Classe java.util.StringJoiner : http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html
Vous pourriez facilement écrire une telle fonction en une dizaine de lignes de code :
String combine(String[] s, String glue)
{
int k = s.length;
if ( k == 0 )
{
return null;
}
StringBuilder out = new StringBuilder();
out.append( s[0] );
for ( int x=1; x < k; ++x )
{
out.append(glue).append(s[x]);
}
return out.toString();
}
Réponse aux modifications
Je vois que quelqu'un a enlevé ma déclaration "en une dizaine de lignes de code". Je l'ai remis. Ce n'était pas un aparté non pertinent, mais je faisais remarquer qu'il s'agit d'une fonction courte et simple. En outre, il y a un certain nombre de commentaires sur la longueur du code, qui cessent d'avoir un sens si vous supprimez cette déclaration.
Je vois aussi que quelqu'un a modifié le code pour ajouter des accolades là où elles sont facultatives. Cela contribue à rendre plus confuse la discussion sur la nécessité des accolades. Vous devriez vraiment lire les commentaires avant de modifier un article. Je n'ai pas pris la peine de les supprimer.
Quelqu'un a modifié ma boucle FOR pour ajouter un tas d'espaces inutiles. Bon, d'accord, la syntaxe est la même dans les deux cas, et si vous avez le temps d'éditer le code des autres pour des préférences stylistiques triviales, peu importe.
Quelqu'un a changé le premier retour de 'return null' en 'return ""' avec la déclaration "eliminate evil null". Non. Il y a une grande différence entre "vous ne m'avez donné aucune chaîne à joindre" et "vous m'avez donné une chaîne vide". Dans un certain contexte, il se peut que vous vouliez le même retour dans les deux cas, mais dans d'autres contextes, non. Il n'est pas du tout évident pour moi que le fait de ne pas distinguer les deux cas soit supérieur.
Mais le montage le plus déroutant de tous était celui-ci : J'ai dit que peut-être une meilleure signature serait String combine(String glue, String... s), car cela permettrait à l'appelant de passer soit une liste séparée par des virgules, soit un tableau. Et quelqu'un a supprimé cette déclaration avec le commentaire qu'elle était "inutile et fausse". Mais, humm, s'il vous plaît, expliquez comment c'est soit.
À mon humble avis, si vous n'êtes pas d'accord avec une réponse, postez votre propre réponse ou expliquez votre désaccord dans les commentaires. Ne changez pas la réponse en ce que vous auriez dit.