269 votes

Java : fonction pour les tableaux comme join() de PHP ?

Je veux rejoindre une String[] avec un cordon de colle. Existe-t-il une fonction pour cela ?

317voto

coobird Points 70356

Langage Apache Commons a un StringUtils qui a une join qui joindra les tableaux ensemble pour créer un String .

Par exemple :

StringUtils.join(new String[] {"Hello", "World", "!"}, ", ")

Génère les éléments suivants String :

Hello, World, !

73voto

Noah Points 7332

Si vous cherchiez quoi utiliser dans Android, c'est le cas :

String android.text.TextUtils.join(CharSequence delimiter, Object[] tokens)

par exemple :

String joined = TextUtils.join(";", MyStringArray);

57voto

Marek Gregor Points 396

En Java 8, vous pouvez utiliser

1) API de flux :

String[] a = new String[] {"a", "b", "c"};
String result = Arrays.stream(a).collect(Collectors.joining(", "));

2) nouvelle méthode String.join : http://stackoverflow.com/a/21756398/466677

3) Classe java.util.StringJoiner : http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html

53voto

Jay Points 14781

Vous pourriez facilement écrire une telle fonction en une dizaine de lignes de code :

String combine(String[] s, String glue)
{
  int k = s.length;
  if ( k == 0 )
  {
    return null;
  }
  StringBuilder out = new StringBuilder();
  out.append( s[0] );
  for ( int x=1; x < k; ++x )
  {
    out.append(glue).append(s[x]);
  }
  return out.toString();
}

Réponse aux modifications

Je vois que quelqu'un a enlevé ma déclaration "en une dizaine de lignes de code". Je l'ai remis. Ce n'était pas un aparté non pertinent, mais je faisais remarquer qu'il s'agit d'une fonction courte et simple. En outre, il y a un certain nombre de commentaires sur la longueur du code, qui cessent d'avoir un sens si vous supprimez cette déclaration.

Je vois aussi que quelqu'un a modifié le code pour ajouter des accolades là où elles sont facultatives. Cela contribue à rendre plus confuse la discussion sur la nécessité des accolades. Vous devriez vraiment lire les commentaires avant de modifier un article. Je n'ai pas pris la peine de les supprimer.

Quelqu'un a modifié ma boucle FOR pour ajouter un tas d'espaces inutiles. Bon, d'accord, la syntaxe est la même dans les deux cas, et si vous avez le temps d'éditer le code des autres pour des préférences stylistiques triviales, peu importe.

Quelqu'un a changé le premier retour de 'return null' en 'return ""' avec la déclaration "eliminate evil null". Non. Il y a une grande différence entre "vous ne m'avez donné aucune chaîne à joindre" et "vous m'avez donné une chaîne vide". Dans un certain contexte, il se peut que vous vouliez le même retour dans les deux cas, mais dans d'autres contextes, non. Il n'est pas du tout évident pour moi que le fait de ne pas distinguer les deux cas soit supérieur.

Mais le montage le plus déroutant de tous était celui-ci : J'ai dit que peut-être une meilleure signature serait String combine(String glue, String... s), car cela permettrait à l'appelant de passer soit une liste séparée par des virgules, soit un tableau. Et quelqu'un a supprimé cette déclaration avec le commentaire qu'elle était "inutile et fausse". Mais, humm, s'il vous plaît, expliquez comment c'est soit.

À mon humble avis, si vous n'êtes pas d'accord avec une réponse, postez votre propre réponse ou expliquez votre désaccord dans les commentaires. Ne changez pas la réponse en ce que vous auriez dit.

27voto

everlasto Points 416

Un petit mod au lieu d'utiliser substring() :

//join(String array,delimiter)
public static String join(String r[],String d)
{
        if (r.length == 0) return "";
        StringBuilder sb = new StringBuilder();
        int i;
        for(i=0;i<r.length-1;i++)
            sb.append(r[i]+d);
        return sb.toString()+r[i];
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X