web-dev-qa-db-fra.com

Convertir un tableau de chaînes en chaîne dans Java

Je veux le code Java pour convertir un tableau de chaînes en chaîne.

211
Princeyesuraj

Si vous voulez juste un dump de tableau de type "debug-style":

String str = Arrays.toString(arr);

ou, pour plus de contrôle (avant Java 8):

StringBuilder builder = new StringBuilder();
for(String s : arr) {
    builder.append(s);
}
String str = builder.toString();

(Java 8 et supérieur):

String str = String.join(",", arr);

Et si vous venez de l'angle Android:

String str = TextUtils.join(",", arr);

Vous pouvez modifier ce qui précède en fonction des caractères que vous souhaitez, le cas échéant, entre les chaînes.

Vous pouvez voir un code presque identique au code antérieur à Java 8, mais utiliser StringBuffer - StringBuilder est une classe plus récente qui ne respecte pas les threads, mais offre donc de meilleures performances dans un seul thread car elle supprime synchronisation inutile. En bref, il vaut mieux utiliser StringBuilder dans 99% des cas - du point de vue des fonctionnalités, les deux sont identiques.

NE PAS FAIRE utilisez une chaîne et ajoutez-y simplement + = comme certaines des réponses le montrent ici. Cela envoie le CPG à travers le toit car vous créez et jetez autant d'objets string que vous avez d'éléments dans votre tableau. Pour les petits tableaux, vous ne remarquerez peut-être pas vraiment la différence, mais pour les grands, cela peut être beaucoup plus lent.

426
Michael Berry

Utilisez Apache commons StringUtils.join() . Il prend un tableau, en tant que paramètre (et a également des surcharges pour les paramètres Iterable et Iterator) et appelle toString() sur chaque élément (s'il n'est pas nul) pour obtenir la représentation sous forme de chaîne de chaque élément. Chaque représentation de chaîne d'éléments est ensuite jointe en une chaîne avec un séparateur entre ceux-ci, le cas échéant:

String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);

Produit:

a-b-1
102
krock

J'aime utiliser Google Guava Joiner pour cela, par exemple:

Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");

produirait la même chaîne que:

new String("Harry, Ron, Hermione");

ETA: Java 8 prend désormais en charge de manière similaire:

String.join(", ", "Harry", "Ron", "Hermione");

Vous ne pouvez pas voir le support pour ignorer les valeurs NULL, mais c'est facile à contourner.

35
rich

Vous pouvez faire ceci, étant donné un tableau a de type primitif:

StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length; i++) {
   result.append( a[i] );
   //result.append( optional separator );
}
String mynewstring = result.toString();
13
JoeSlav

De Java 8, la façon la plus simple de procéder est la suivante:

    String[] array = { "cat", "mouse" };
    String delimiter = "";
    String result = String.join(delimiter, array);

De cette façon, vous pouvez choisir un délimiteur arbitraire.

12
Midiparse

Essayez la méthode Arrays.deepToString .

Retourne une représentation sous forme de chaîne du "contenu profond" du tableau spécifié. Si le tableau contient d'autres tableaux en tant qu'éléments, la représentation sous forme de chaîne contient leur contenu, etc. Cette méthode est conçue pour convertir des tableaux multidimensionnels en chaînes

9
SANN3

Essayez les méthodes Arrays.toString surchargées.

Ou bien, essayez ceci ci-dessous implémentation générique:

public static void main(String... args) throws Exception {

    String[] array = {"ABC", "XYZ", "PQR"};

    System.out.println(new Test().join(array, ", "));
}

public <T> String join(T[] array, String cement) {
    StringBuilder builder = new StringBuilder();

    if(array == null || array.length == 0) {
        return null;
    }

    for (T t : array) {
        builder.append(t).append(cement);
    }

    builder.delete(builder.length() - cement.length(), builder.length());

    return builder.toString();
}
7
adarshr

Voici un exemple de conversion de tableau en chaîne.

 public class ArrayToString 
 {
public static void main (String [] args) { String [] strArray = new String [] {"Java", "PHP", ".NET", " Perl "," C "," COBOL "};
        String newString = Arrays.toString(strArray);

        newString = newString.substring(1, newString.length()-1);

        System.out.println("New New String: " + newString);
    }
}

3
parag.rane
String[] strings = new String[25000];
for (int i = 0; i < 25000; i++) strings[i] = '1234567';

String result;
result = "";
for (String s : strings) result += s;
//linear +: 5s

result = "";
for (String s : strings) result = result.concat(s);
//linear .concat: 2.5s

result = String.join("", strings);
//Java 8 .join: 3ms

Public String join(String delimiter, String[] s)
{
    int ls = s.length;
    switch (ls)
    {
        case 0: return "";
        case 1: return s[0];
        case 2: return s[0].concat(delimiter).concat(s[1]);
        default:
            int l1 = ls / 2;
            String[] s1 = Arrays.copyOfRange(s, 0, l1); 
            String[] s2 = Arrays.copyOfRange(s, l1, ls); 
            return join(delimiter, s1).concat(delimiter).concat(join(delimiter, s2));
    }
}
result = join("", strings);
// Divide&Conquer join: 7ms

Si vous n'avez pas le choix d'utiliser Java 6 ou 7, vous devez utiliser la jointure Divide & Conquer.

1
Ortreum
String array[]={"one","two"};
String s="";

for(int i=0;i<array.length;i++)
{
  s=s+array[i];
}

System.out.print(s);
0
Vikram

Utilisez la méthode de jointure de bibliothèque StringUtils de Apache Commons.

String[] stringArray = {"a","b","c"};
StringUtils.join(stringArray, ",");
0
Taner

Vous voulez du code qui produit une chaîne de tableauListe,

Iterate through all elements in list and add it to your String result

vous pouvez le faire de deux manières: en utilisant String comme résultat ou StringBuffer/StringBuilder.

Exemple:

String result = "";
for (String s : list) {
    result += s;
}

... mais ce n'est pas une bonne pratique pour des raisons de performance. Mieux vaut utiliser StringBuffer (threads safe) ou StringBuilder qui sont plus appropriés pour ajouter des chaînes.

0
lukastymo