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.
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
Character[] a = ...
new String(ArrayUtils.toPrimitive(a));
ArrayUtils
fait partie de Apache Commons Lang .
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:
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.
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() );
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);
À chaque index, appelez la méthode toString et concaténez le résultat dans votre String s.
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);
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;
}
En fait, si vous avez de la goyave, vous pouvez utiliser Chars.toArray()
pour produire char[]
puis simplement envoyer le résultat à String.valueOf()
.
int length = cArray.length;
String val="";
for (int i = 0; i < length; i++)
val += cArray[i];
System.out.println("String:\t"+val);