2
votes

Ignorer les caractères NULL de fin lors de la conversion d'une chaîne à partir d'un tableau de caractères

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?


1 commentaires

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.


3 Réponses :


2
votes

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


3 commentaires

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



4
votes
String s = String.valueOf(bits).trim();
just trim the string it'll get rid of all *leading & *trailing white space.

3 commentaires

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.



-1
votes

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


0 commentaires