Java: convertir List<String> pour une Chaîne de caractères
JavaScript a Array.join()
js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve
Java ont quelque chose comme cela? Je sais que je peux bricoler quelque chose de moi-même 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 il n'y a aucun point en faisant cela, si quelque chose comme elle est déjà partie du JDK.
- Voir aussi cette question pour lists
- Ne sont pas strictement liées mais android a un construit en fonction join dans le cadre de leur TextUtils de la classe: developer.android.com/reference/android/text/..., java.lang.Itérable)
- Java 8 est un
String.join()
méthode. Jetez un oeil à cette réponse si vous utilisez Java 8 (ou plus récent) stackoverflow.com/a/22577565/1115554
InformationsquelleAutor Jason S | 2009-11-17
Vous devez vous connecter pour publier un commentaire.
Avec Java 8, vous pouvez le faire sans aucun la troisième partie de la bibliothèque.
Si vous voulez vous joindre à une Collection de Chaînes, vous pouvez utiliser le nouveau Chaîne de caractères.join() méthode:
Si vous avez une Collection avec un autre type de Chaîne de caractères, vous pouvez utiliser le Flux de l'API avec le rejoindre le Collecteur:
La
StringJoiner
classe peut également être utile.[a, b, c]
y compris les accolades.Iterable<CharSequence>
; Interface de relation:Iterable -> Collection -> List
Toutes les références à Apache Commons sont bien (et c'est ce que la plupart des gens utilisent) mais je pense que le Goyave équivalent, Menuisier, est beaucoup plus agréable de l'API.
Vous pouvez faire de la simple jointure cas avec
mais aussi facilement traiter avec les valeurs null:
ou
et (assez utile pour autant que je suis concerné, à utiliser de préférence à commons-lang), la capacité de traiter avec les Cartes:
qui est extrêmement utile pour le débogage etc.
.useForLastSeparator()
ou une méthode semblable? De cette façon, vous pourriez obtenir quelque chose comme " et " entre les deux derniers articles (avec ", " pour le reste).separator
(qui estfinal
). Tout ce que j'ai vu dans la Goyave, où j'ai l'habitude d'utiliser un Apache Commons équivalent a été tellement mieux (lire: plus propre, plus rapide, plus sûre et plus juste plus robuste en général) dans la Goyave avec moins de cas de bord échecs fil et les questions de sécurité et de la plus petite empreinte mémoire. Leur "meilleure façon possible", principe qui semble le cas jusqu'à présent.String.join()
méthode et unStringJoiner
classe.useForNull("[unknown]")
devrait êtreforNullUse("[unknown]")
, n'est-ce pas?Strings.emptyToNull
sur vos valeurs:final String a = Strings.emptyToNull( nameA.trim() ); return Joiner.on(" and ").skipNulls().join(a);
Pas hors de la boîte, mais beaucoup de bibliothèques ont les mêmes:
Commons Lang:
Printemps:
Sur Android vous pouvez utiliser TextUtils classe.
String.join
il faut min niveau api 26 sur android.Non, il n'y a pas une telle méthode de convenance dans la norme API Java.
Il n'est pas surprenant, Apache Commons fournit une telle chose dans leur StringUtils classe dans le cas où vous ne voulez pas écrire vous-même.
isEmpty()
méthode au lieu d'un (statique)join()
méthode dansString
... :rollseyes: 🙂Trois possibilités dans Java 8:
Avec java 8 collecteur, ce qui peut être fait avec le code suivant:
Aussi, la solution la plus simple en java 8:
ou
J'ai écrit celui-ci (je l'utilise pour les haricots et les exploiter
toString
, afin de ne pas écrireCollection<String>
):mais
Collection
n'est pas pris en charge par JSP, donc pour le TLD, j'ai écrit:et de mettre à
.tld
fichier:et de l'utiliser dans des fichiers JSP que:
Collection<>
àIterable<>
?Code que vous avez est de bonne façon de le faire si vous voulez le faire à l'aide du JDK, sans les bibliothèques externes. Il n'est pas simple "one-liner" que vous pouvez utiliser dans le JDK.
Si vous pouvez utiliser des libs, je recommande que vous regardez dans les org.apache.commons.lang.StringUtils classe dans Apache Commons bibliothèque.
Un exemple d'utilisation:
Orthodoxe façon d'y parvenir est par la définition d'une nouvelle fonction:
Exemple:
De sortie:
separator
serait beaucoup plus suggestive.Vous pouvez utiliser l'apache commons bibliothèque qui a un StringUtils classe et une méthode de participation.
Vérifier ce lien: https://commons.apache.org/proper/commons-lang/javadocs/api.2.0/org/apache/commons/lang/StringUtils.html
À noter que le lien ci-dessus peuvent devenir obsolètes au fil du temps, dans ce cas, vous pouvez faire une recherche sur le web pour "apache commons StringUtils", qui devrait vous permettre de trouver la dernière version de référence.
(référencé à partir de ce fil)
Java équivalents de C# String.Format() et String.Join()
Java 8 solution avec
java.util.StringJoiner
Java 8 a un
StringJoiner
classe. Mais vous avez encore le besoin d'écrire un peu de texte standard, parce que c'est Java.Vous pouvez faire ceci:
Ou un one-liner (seulement si vous ne voulez pas '[' et ']')
Espère que cette aide.
Une façon amusante de le faire avec de la pure JDK, dans un duty:
De sortie:
Un pas trop parfait & ne pas trop s'amusant!
De sortie:
Vous pourriez vouloir essayer d'Apache Commons StringUtils méthode join:
http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#join(java.util.Itérateur, java.lang.String)
J'ai trouvé que Apache StringUtils ramasse du jdk de mou 😉
Si vous utilisez Eclipse Collections (anciennement GS Collections), vous pouvez utiliser le
makeString()
méthode.Si vous pouvez convertir votre
List
à une Éclipse Collections de type, alors vous pouvez vous débarrasser de l'adaptateur.Si vous voulez juste séparés par des virgules, chaîne de caractères, vous pouvez utiliser la version de
makeString()
qui ne prend pas de paramètres.Remarque: je suis un committer pour Eclipse Collections.
Avec java 1.8 flux peut être utilisé ,
Google Goyave API a aussi .join(), même si (comme cela devrait être évident avec les autres réponses), Apache Commons est à peu près la norme ici.
MODIFIER
Je remarque aussi la
toString()
sous-jacents au problème de mise en œuvre, et sur l'élément contenant le séparateur, mais j'ai pensé que j'étais paranoïaque.Vu que j'ai deux commentaires à faire sur ce sujet, je vais changer ma réponse:
Qui ressemble assez à la question d'origine.
Donc, si vous ne vous sentez pas comme l'ajout de tout le pot à votre projet, vous pouvez utiliser ce.
Je pense qu'il n'y a rien de mal avec votre code d'origine. En fait, l'alternative que tout le monde est ce qui suggère ressemble presque la même ( même si il fait un certain nombre d'autres validations )
Ici, il est, avec le Licence Apache 2.0.
Nous savons maintenant, je vous remercie open source
", "
?Java 8 apporte de la
méthode, c'est nullsafe en utilisant
prefix + suffix
pour les valeurs null.Il peut être utilisé de la manière suivante:
La
Collectors.joining(CharSequence delimiter)
méthode appelle justejoining(delimiter, "", "")
en interne.Vous pouvez l'utiliser à partir du Printemps du Cadre de StringUtils. Je sais qu'il a déjà été mentionné, mais vous pouvez réellement prendre juste ce code et il fonctionne immédiatement, sans avoir besoin de Printemps pour elle.
Essayez ceci: