2010-03-10 19 views
3

Y a-t-il quelque chose comme ce qui suit dans Apache Common Lang ou Spring Utils ou écrivez-vous votre propre méthode Util pour cela?Existe-t-il une méthode utilitaire pour séparer une liste par une chaîne donnée?

List<String> list = new ArrayList<String>(); 
list.add("moo"); 
list.add("foo"); 
list.add("bar"); 

String enumeratedList = Util.enumerate(list, ", "); 

assert enumeratedList == "moo, foo, bar"; 

Je me souviens de l'utilisation implode en php, ce que je cherche java.

$array = array('lastname', 'email', 'phone'); 
$comma_separated = implode(",", $array); 

Répondre

11

Vous pouvez utiliser StringUtils.join(Object[] array, String delimiter) (de commons-lang) de la façon suivante:

String enumeratedList = StringUtils.join(list.toArray(), ", "); 
+0

Merci, oublier que dans l'API. – codevour

+0

Bien que j'aime la solution de bozho, je ne vois aucune raison de ne pas créer une simple boucle 'for' et de le faire vous-même (prend 3-4 lignes de code). Je veux dire, si vous n'avez pas inclus 'commons-lang' dans votre projet jusqu'ici, l'incluez-vous seulement pour un outil que vous pouvez écrire vous-même pendant une minute? ;-) – dimitarvp

+5

@dimitko: Parce que 1 ligne est inférieure à 3-4. C'est plus lisible, moins sujette aux erreurs et une fois que vous avez la bibliothèque incluse, vous pouvez l'utiliser "partout". – whiskeysierra

3

Il est assez trivial de inplement si vous ne voulez pas une dépendance sur commons-lang. Ce n'est pas génial non plus de convertir une liste en un tableau simplement pour le rejoindre dans une chaîne. Au lieu de simplement itérer sur votre collection. Encore mieux que d'utiliser Collection utilise Iterable qui gère tout ce qui peut être itérateur (même une sorte de flux ou de collection de longueur inconnue).

import java.util.Arrays; 
import java.util.Iterator; 

public class JoinDemo { 
    public static String join(String sep, Iterable<String> i) { 
    StringBuilder sb = new StringBuilder(); 
    for (Iterator<String> it = i.iterator(); it.hasNext();) { 
     sb.append(it.next()); 
     if (it.hasNext()) 
     sb.append(sep); 
    } 
    return sb.toString(); 
    } 

    public static void main(String[] args) { 
    System.out.println(join(",", Arrays.asList(args))); 
    } 
} 

Exemple:

# javac JoinDemo.java 
# java JoinDemo a b c 
a,b,c 
4

Google Collections fournit la classe Joiner, qui peut être utilisé comme ceci:

public class Main { 

    public static void main(String[] args) { 
     List<String> list = Lists.newLinkedList(); 
     list.add("1"); 
     list.add("2"); 
     list.add("3"); 
     System.out.println(Joiner.on(", ").join(list)); 
    } 

}