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

242

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

Princeyesuraj
la source
Quel genre de tableau? Tableau de cordes?
adarshr
2
array.toString()? Sois plus précis.
Stan Kurilin
1
@Princeyesuraj, la réponse officielle est fournie par adarshr . Si vous voulez votre propre séparateur, vous pouvez essayer la réponse de JoeSlav , et si aucun problème de thread, vous pouvez utiliser StringBuilder au lieu de StringBuffer pour plus d'efficacité. La réponse de krock est bonne, mais un peu exagérée à mon avis.
Dante May Code

Réponses:

470

Si vous voulez juste un vidage "de style débogage" d'un tableau:

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 sous l'angle Android:

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

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

Vous pouvez voir un code presque identique au code pré-Java 8, mais l'utilisation de StringBuffer- StringBuilderest une classe plus récente qui n'est pas adaptée aux threads, mais a donc de meilleures performances dans un seul thread car elle supprime la synchronisation inutile. En bref, il vaut mieux utiliser StringBuilderdans 99% des cas - en termes de fonctionnalité, les deux sont identiques.

N'UTILISEZ PAS de chaîne et ajoutez-la simplement avec + = comme certaines des réponses ici. Cela envoie le GC à travers le toit parce que vous créez et jetez autant d'objets chaîne 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, il peut être plus lent de plusieurs ordres de grandeur.

Michael Berry
la source
13
Merci pour l'explication sur pourquoi StringBuilder est supérieur à + = pour l'ajout.
Nicholas Miller
5
Si vous utilisez un + = sous les couvertures, Java le convertira en utilisant un StringBuilder.
Javamann
6
@matteo, vous devez utiliser Arrays.toString(yourArray);mais je suppose que vous avez utiliséyourArray.toString();
Dzarafata
5
Depuis Java, 1.8vous pouvez également utiliser String::join, au lieu de la boucle for. String.join("", arr);
Jorn Vernee
2
Les développeurs Android peuvent utiliser comme String result = TextUtils.join (",", list); stackoverflow.com/questions/33802971/…
Rahul Hawge
102

Utilisez Apache commons StringUtils.join(). Il prend un tableau en tant que paramètre (et a également des surcharges pour Iterableet des Iteratorparamètres) et appelle toString()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 les deux si l'un est spécifié:

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

Produit:

a-b-1
krock
la source
1
correction mineure: joinString = StringUtils.join (nouvel objet [] {"a", "b", "1"}, "-");
questborn
35

J'aime utiliser Google Joiner Guava 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 dispose désormais d'un support similaire:

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

Je ne vois pas la prise en charge du saut de valeurs nulles, mais cela est facile à contourner.

riches
la source
10
Mais si nous étions fidèles à l'intrigue, ce nullserait "celui dont le nom ne doit pas être mentionné" :-)
Stephen C
22
Si vous êtes courageux: ;-)Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
riche
Utilisation de java-8String.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
Cjo
13

Vous pouvez le faire, étant donné un tableau ade 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();
JoeSlav
la source
23
StringBuffer est ancien, utilisez plutôt StringBuilder qui n'a pas de synchronisation inutile pour une utilisation dans un thread.
Jason S
13

Depuis Java 8, la manière la plus simple, je pense, est:

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

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

Midiparse
la source
10

Essayez la méthode Arrays.deepToString .

Renvoie 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

SANN3
la source
Si vous n'avez pas besoin de beaucoup de contrôle, je pense que c'est la solution la plus simple car vous n'avez pas besoin d'une bibliothèque tierce. Voici un exemple: System.out.println (Arrays.deepToString (args));
neves
7

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

Sinon, essayez cette implémentation générique ci-dessous:

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();
}
adarshr
la source
Dites-nous ensuite le format que vous recherchez. Sinon, nous ne pouvons pas deviner ce que vous avez en tête.
Jason S
3

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);
    }
}

parag.rane
la source
1
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 mais d'utiliser Java 6 ou 7, vous devez utiliser la jointure Divide & Conquer.

Ortreum
la source
0

Vous voulez du code qui produit une chaîne à partir de arrayList,

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

vous pouvez le faire de 2 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 performances. Mieux vaut utiliser StringBuffer (threads safe) ou StringBuilder qui sont plus appropriés pour ajouter des chaînes

lukastymo
la source
-1
String array[]={"one","two"};
String s="";

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

System.out.print(s);
Vikram
la source
1
Votre réponse est fondamentalement la même que smas; juste un peu plus compliqué; donc certainement pas "le plus facile". Et en plus, Arrays.toString () est encore plus facile.
GhostCat
-22

Si vous savez combien d'éléments le tableau possède, une méthode simple est la suivante:

String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3]; 
Juan Duke
la source
10
C'est difficilement applicable dans le monde réel et montre de mauvaises pratiques de programmation.
Jk1
3
Pourrait être une grande médaille d'or pour atteindre -50 négatifs
Pablo Cegarra