2009-11-27 21 views

Répondre

6

Non, pas dans la bibliothèque Java actuelle.

Dans JDK7, vous devriez être en mesure d'écrire String.join("", strings). Il a été constaté que "85%" des utilisations pour vouloir un index dans la boucle for chic était de faire une jointure de chaîne (que vous pouvez faire de toute façon).

Je suppose que si vous voulez être uber efficace, vous pourriez écrire quelque chose comme:

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é ou testé, bien sûr.)

+0

En un an, lol :) –

+0

IIRC, la dernière étape est maintenant due en Septembre (de 2010). –

+0

Le jalon actuel M5 semble également parfaitement utilisable. – skaffman

2
org.apache.commons.lang.StringUtils.join 
+2

OP demande spécifiquement une "fonction intégrée" [sic] – Tim

+2

@Tim Apache commun est intégré de facto. –

+0

Il a dit qu'il devrait y en avoir un, et il a raison .... mais il n'y a pas, et Apache Commons est le meilleur que nous avons – skaffman

5

Jetez un oeil à la nouvelle Google Guava libraries , qui incorporera Google Collections une fois qu'il passe 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.

La classe convient parfaitement Joiner votre exemple:

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

Aleksander Stensby a une belle four part exploration de Goyave/Collections. Comme Apache Collections, il ne fait pas partie du JDK, bien qu'il soit construit très soigneusement au-dessus de java.util.collection.

+0

petite correction: Joiner.on (""). Join (chaînes). –

+0

Merci Kevin, réparé! (Et * merci * pour Collections, je viens de commencer à les regarder de près et j'ai hâte de les utiliser!) –

0

Deuxième recommandation à regarder Google Goyave.

Google Collections a été publié la semaine dernière, et cette semaine, Guava a été publié pour test. Le contenu de Google Collections est solide et l'API ne changera pas. Je préfère de loin Google Collections à celle d'Apache, en particulier parce qu'elle est entièrement générique. Les gens de Google prétendent également que c'est assez rapide pour qu'ils puissent l'utiliser en production, ce qui est assez impressionnant, bien que je ne puisse pas le vérifier personnellement.