Je veux le code Java pour convertir un tableau de chaînes en chaîne.
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.
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
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.
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();
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.
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
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();
}
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);
}
}
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.
String array[]={"one","two"};
String s="";
for(int i=0;i<array.length;i++)
{
s=s+array[i];
}
System.out.print(s);
Utilisez la méthode de jointure de bibliothèque StringUtils de Apache Commons.
String[] stringArray = {"a","b","c"};
StringUtils.join(stringArray, ",");
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.