JavaScript a Array.join()
js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve
Java a-t-il quelque chose comme ça? Je sais que je peux bricoler quelque chose avec StringBuilder:
static public String join(List<String> list, String conjunction)
{
StringBuilder sb = new StringBuilder();
boolean first = true;
for (String item : list)
{
if (first)
first = false;
else
sb.append(conjunction);
sb.append(item);
}
return sb.toString();
}
... mais cela ne sert à rien si quelque chose comme ça fait déjà partie du JDK.
String.join()
méthode. Jetez un oeil à cette réponse si vous utilisez Java 8 (ou plus récent) stackoverflow.com/a/22577565/1115554Réponses:
Avec Java 8, vous pouvez le faire sans aucune bibliothèque tierce.
Si vous souhaitez rejoindre une collection de chaînes, vous pouvez utiliser la nouvelle méthode String.join () :
Si vous avez une collection avec un autre type que String, vous pouvez utiliser l'API Stream avec le collecteur joint :
La
StringJoiner
classe peut également être utile.la source
assertThat(String.join(", ", Lists.newArrayList("1", null)), is("1, null"));
[a, b, c]
inclure les accolades.Iterable<CharSequence>
; Relation d'interface:Iterable -> Collection -> List
Toutes les références à Apache Commons sont correctes (et c'est ce que la plupart des gens utilisent) mais je pense que l' équivalent de la goyave , Joiner , a une API beaucoup plus agréable.
Vous pouvez faire le cas de jointure simple avec
mais aussi gérer facilement les nulls:
ou
et (assez utile en ce qui me concerne pour l'utiliser de préférence à commons-lang), la possibilité de gérer Maps:
ce qui est extrêmement utile pour le débogage, etc.
la source
.useForLastSeparator()
ou une méthode similaire? De cette façon, vous pourriez obtenir quelque chose comme "et" entre seulement les deux derniers éléments (avec "," pour le reste).separator
(qui estfinal
). Tout ce que j'ai vu à Guava, où j'utilisais un équivalent d'Apache Commons, était tellement mieux (lire: plus propre, plus rapide, plus sûr et juste plus robuste en général) à Guava avec moins de défaillances de cas de bord et de problèmes de sécurité des threads et encombrement mémoire réduit. Leur principe directeur "de la meilleure façon possible" semble être vrai jusqu'à présent.String.join()
méthode et uneStringJoiner
classe.Pas prêt à l'emploi, mais de nombreuses bibliothèques ont des similitudes:
Commons Lang:
Printemps:
la source
Sur Android, vous pouvez utiliser la classe TextUtils .
la source
String.join
nécessite un niveau minimum d'api 26 sur android.Non, il n'y a pas une telle méthode pratique dans l'API Java standard.
Sans surprise, Apache Commons fournit une telle chose dans leur classe StringUtils au cas où vous ne voudriez pas l'écrire vous-même.
la source
isEmpty()
méthode au lieu d' une méthode (statique)join()
dansString
...: rollseyes: :)Trois possibilités en Java 8:
la source
Avec un collecteur java 8, cela peut être fait avec le code suivant:
De plus, la solution la plus simple en java 8:
ou
la source
J'ai écrit celui-ci (je l'utilise pour les beans et l'exploiter
toString
, alors n'écrivez pasCollection<String>
):mais
Collection
n'est pas pris en charge par JSP, donc pour TLD, j'ai écrit:et mettre au
.tld
dossier:et l'utiliser dans les fichiers JSP comme:
la source
Collection<>
pourIterable<>
?Le code dont vous disposez est la bonne façon de le faire si vous souhaitez utiliser JDK sans bibliothèque externe. Il n'y a pas de "one-liner" simple que vous pourriez utiliser dans JDK.
Si vous pouvez utiliser des bibliothèques externes, je vous recommande de consulter la classe org.apache.commons.lang.StringUtils dans la bibliothèque Apache Commons.
Un exemple d'utilisation:
la source
Un moyen orthodoxe pour y parvenir, est de définir une nouvelle fonction:
Échantillon:
Production:
la source
separator
serait beaucoup plus suggestif.Solution Java 8 avec
java.util.StringJoiner
Java 8 a une
StringJoiner
classe. Mais vous devez encore écrire un peu de passe-partout, car c'est Java.la source
Vous pouvez utiliser la bibliothèque apache commons qui a une classe StringUtils et une méthode join.
Vérifiez ce lien: https://commons.apache.org/proper/commons-lang/javadocs/api.2.0/org/apache/commons/lang/StringUtils.html
Notez que le lien ci-dessus peut devenir obsolète au fil du temps, auquel cas vous pouvez simplement rechercher sur le Web "apache commons StringUtils", qui devrait vous permettre de trouver la dernière référence.
(référencé à partir de ce fil) Équivalents Java de C # String.Format () et String.Join ()
la source
Tu peux le faire:
Ou une ligne (uniquement lorsque vous ne voulez pas «[» et «]»)
J'espère que cela t'aides.
la source
Une façon amusante de le faire avec du JDK pur, dans une seule ligne de service:
Production:
Une manière pas trop parfaite et pas trop amusante!
Production:
la source
Vous pouvez essayer la méthode de jointure Apache Commons StringUtils:
http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#join(java.util.Iterator , java.lang.String)
J'ai trouvé qu'Apache StringUtils prend le relais de jdk ;-)
la source
Si vous utilisez des collections Eclipse (anciennement collections GS ), vous pouvez utiliser la
makeString()
méthode.Si vous pouvez convertir votre
List
en un type de collections Eclipse, vous pouvez vous débarrasser de l'adaptateur.Si vous voulez juste une chaîne séparée par des virgules, vous pouvez utiliser la version
makeString()
qui ne prend aucun paramètre.Remarque: je suis un committer pour les collections Eclipse.
la source
Avec java 1.8 stream peut être utilisé,
la source
ÉDITER
Je remarque également le
toString()
problème d'implémentation sous - jacent et l'élément contenant le séparateur, mais je pensais que j'étais paranoïaque.Étant donné que j'ai deux commentaires à ce sujet, je change ma réponse en:
Ce qui ressemble assez à la question d'origine.
Donc, si vous n'avez pas envie d'ajouter le pot entier à votre projet, vous pouvez l'utiliser.
Je pense qu'il n'y a rien de mal avec votre code d'origine. En fait, l'alternative que tout le monde suggère est presque la même (bien qu'elle fasse un certain nombre de validations supplémentaires)
Le voici, avec la licence Apache 2.0.
Maintenant, nous savons, merci open source
la source
", "
- chaîne ?L'API Guava de Google a également .join (), bien que (comme cela devrait être évident avec les autres réponses), Apache Commons soit à peu près la norme ici.
la source
Java 8 apporte le
, c'est-à-dire nullsafe en utilisant
prefix + suffix
des valeurs nulles.Il peut être utilisé de la manière suivante:
La
Collectors.joining(CharSequence delimiter)
méthode appelle simplement enjoining(delimiter, "", "")
interne.la source
Vous pouvez l'utiliser à partir de StringUtils de Spring Framework. Je sais qu'il a déjà été mentionné, mais vous pouvez réellement prendre ce code et cela fonctionne immédiatement, sans avoir besoin de Spring pour cela.
la source
Essaye ça:
la source