web-dev-qa-db-fra.com

Convertir un tableau de caractères en chaîne en Java

J'ai un tableau Character (pas de tableau de caractères) et je veux le convertir en chaîne en combinant tous les caractères du tableau. 

J'ai essayé ce qui suit pour un Character[] a donné:

String s = new String(a) //given that a is a Character array

Mais cela ne fonctionne pas car a n'est pas un tableau de caractères. J'apprécierais toute aide.

10
Aasam Tasaddaq

Itérer et concaténer l'approche:

Character[] chars = {new Character('a'),new Character('b'),new Character('c')};

String str = "";

for (Character c : chars)
    str += c.toString();

System.out.println(str);

Sortie:

abc

5
Juvanis
Character[] a = ...
new String(ArrayUtils.toPrimitive(a));

ArrayUtils fait partie de Apache Commons Lang .

15
Torious

Le moyen le plus efficace de le faire est très probablement ceci:

Character[] chars = ...

StringBuilder sb = new StringBuilder(chars.length);
for (Character c : chars)
    sb.append(c.charValue());

String str = sb.toString();

Remarques:

  1. L'utilisation d'un StringBuilder évite de créer plusieurs chaînes intermédiaires.
  2. Fournir la taille initiale évite les réaffectations.
  3. Utiliser charValue() évite d’appeler Character.toString() ... 

Cependant, j'irais probablement avec la réponse élégante de @ Torious à moins que la performance ne soit un problème majeur.


Incidemment, le JLS indique que le compilateur est autorisé à optimiser les expressions de concaténation de chaînes à l'aide d'un code StringBuilder équivalent ... mais il ne sanctionne pas cette optimisation sur plusieurs instructions. Par conséquent, quelque chose comme ceci:

    String s = ""
    for (Character c : chars) {
        s += c;
    }

est susceptible de faire beaucoup de concaténations distinctes, créant (et ignorant) beaucoup de chaînes intermédiaires.

8
Stephen C

Probablement exagéré, mais sur Java 8, vous pouvez le faire:

Character[] chars = {new Character('a'),new Character('b'),new Character('c')};

String value = Arrays.stream(chars)
                .map(Object::toString)
                .collect( Collectors.joining() );
3
Miguel Durazo

C'est probablement lent, mais pour les coups de pied, voici un vilain liner qui est différent des autres approches - 

Arrays.toString(characterArray).replaceAll(", ", "").substring(1, characterArray.length + 1);
3
rees

À chaque index, appelez la méthode toString et concaténez le résultat dans votre String s.

2
Kiith Nabaal

Commencez par convertir le Character[] en char[] et utilisez String.valueOf(char[]) pour obtenir la chaîne comme ci-dessous:

    char[] a1 = new char[a.length];
    for(int i=0; i<a.length; i++) {
        a1[i] = a[i].charValue();
    }
    String text = String.valueOf(a1);
    System.out.println(text);
2
Yogendra Singh

que diriez-vous de créer votre propre méthode qui parcourt la liste du tableau de caractères, puis ajoutant chaque valeur à votre nouvelle chaîne.

Quelque chose comme ça.

public String convertToString(Character[] s) {
   String value;

   if (s == null) {
     return null;
   }

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

   return value;
} 
2
Tom

En fait, si vous avez de la goyave, vous pouvez utiliser Chars.toArray() pour produire char[] puis simplement envoyer le résultat à String.valueOf().

0
Johnny Wu
int length = cArray.length;
String val="";
for (int i = 0; i < length; i++)
    val += cArray[i];
System.out.println("String:\t"+val);
0
Harikrishnan