J'utilise une API JNI (que je ne peux pas modifier) qui renvoie un tableau de caractères de taille fixe qui représente une chaîne.
Je le convertis en String avec String.valueOf (char [])
Le problème est que je peux recevoir un tableau comme celui-ci {'a', 'b', 'c', '\ 0', '\ 0', '\ 0'} < / p>
L'utilisation de valueOf () permet de conserver les NULL à la fin et un I get a false string.
Existe-t-il un moyen simple de convertir un tel tableau en chaîne et de supprimer les NULL?
3 Réponses :
Normalement, vous obtiendrez à la fois un tableau et une variable length indiquant le nombre de caractères à lire dans le tableau. Si vous n'avez pas de variable length , vous pouvez la trouver avec une boucle et utiliser new String (char [], int, int) constructeur :
char[] arr = {'a','b','c','\0','\0','\0'};
int len = 0;
do {
len++;
} while (arr.length > len && arr[len] != '\0');
String s = new String(arr, 0 ,len);
System.out.println(s); // abc
Vous supposez qu'il ne peut pas commencer par un \ 0 . Et qu'il n'y en aura pas au milieu.
Vous supposez également qu'il y a au moins un \ 0 de fin.
thx mais je demandais un truc que je n'étais pas au courant comme @mavriksc. Vous répondez rester gentil pour diriger l'espace
String s = String.valueOf(bits).trim(); just trim the string it'll get rid of all *leading & *trailing white space.
En supposant que vous êtes d'accord avec le découpage des espaces blancs de premier plan également.
C'est pour ce genre de truc que je demandais. @shmosel le critique;) c'est bien mon cas
Pour les futurs lecteurs: String.trim () supprime tous les caractères de début et de fin qui sont égaux ou inférieurs à l'espace ( <= 0x20 ); qui inclut les caractères de contrôle.
Je l'ai fait comme ceci: comme les nulls ne sont qu'à la fin du charArray, j'ai parcouru le tableau en arrière et j'ai compté le nombre de nulls qu'il avait. Ensuite, j'ai parcouru le tableau en utilisant sa longueur moins le nombre de nuls comme limite supérieure dans la boucle for next et j'ai construit la chaîne finale sans les nuls de fin.
Comme ceci:
public String getStringFromBufferedCharArray(char[] cArray) {
StringBuilder finalString = new StringBuilder();
int count = 0;
for (int x = cArray.length - 1; x >= 0; x--) {
if ((int) cArray[x] == 0) count++;
else break;
}
int end = cArray.length - count;
for (int x = 0; x < end; x++) {
finalString.append(cArray[x]);
}
return finalString.toString();
}
Ce ne sont pas des zéros à la fin. Ce sont des caractères NULL . J'ai corrigé le titre et le corps de votre question.