Java - existe-t-il une fonction intégrée permettant de concaténer les chaînes dans une chaîne []?

StackOverflow https://stackoverflow.com/questions/1810954

  •  06-07-2019
  •  | 
  •  

Question

Ou un meilleur moyen que cela?

String concat(String[] strings) {
  StringBuilder out = new StringBuilder();

  for(String next: strings) {
    out.append(next);
  }

  return out.toString();
}

Pas d'inquiétude si non, j'ai juste l'impression qu'il devrait y avoir un système intégré?

Était-ce utile?

La solution

Non, pas dans la bibliothèque Java actuelle.

Dans JDK7, vous devriez pouvoir écrire String.join (", chaînes") . Il a été constaté que " 85% " des utilisations pour vouloir un index dans la boucle posh était de faire une jointure de chaîne (ce que vous pouvez faire de toute façon).

Je suppose que si vous voulez être très efficace, vous pourriez l'écrire comme suit:

public static String concat(String... strs) {
    int size = 0;
    for (String str : strs) {
        size += str.length;
    }

    final char[] cs = new char[size];
    int off = 0;
    try {
        for (String str : strs) {
            int len = str.length();
            str.getChars(0, len, cs, off);
            off += len;
        }
    } catch (ArrayIndexOutOfBoundsException exc) {
        throw new ConcurrentModificationException(exc);
    }
    if (off != cs.length) {
        throw new ConcurrentModificationException();
    }
    return new String(cs);
}

(non compilé ni testé, bien sûr.)

Autres conseils

Consultez les nouvelles bibliothèques Google Guava , qui incorporeront Google Collections une fois qu'il est passé de 1.0RC4 à 1.0. Goyave et Collections vous donnent un peu de puissance et d’élégance et sont déjà largement utilisés dans le code de production de Google.

Le Joiner la classe convient parfaitement à votre exemple:

String[] strings = { "Stack", "Overflow", ".com" };
String site = Joiner.on("").join(strings);

Aleksander Stensby a lancé une exploration en quatre parties de Guava / Collections.

Comme Apache Collections, il ne fait pas partie du JDK, bien qu'il soit construit avec précaution sur java.util.collection.

org.apache.commons.lang.StringUtils.join

Deuxième recommandation de regarder Google Guava.

Google Collections a été publié la semaine dernière et cette semaine, Guava a été publié à des fins de test. Le contenu de Google Collections est solide et l'API ne changera pas. Je préfère de loin Google Collections à Apache, notamment parce qu’il est totalement générique. Les gens de Google affirment également qu’il est assez rapide pour pouvoir être utilisé en production, ce qui est assez impressionnant, même si je ne peux pas le vérifier personnellement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top