web-dev-qa-db-fra.com

Comment convertir un tableau d'octets avec un caractère de terminaison NULL à une chaîne en Java?

Comment créer un objet de chaîne à partir d'un tableau d'octets

byte arr[MAX_SIZE];  // Java

où l'un des éléments de tableau est un octet de terminaison C Null? Est-ce aussi simple que d'appeler

String str = new String( arr );

Le constructeur de cordes peut-il savoir automatiquement au caractère NULL terminant? Tous les octets après que l'octet NULL soit (éventuellement) des ordures que je ne veux pas inclure dans la chaîne. La dernière réponse sous analyse d'analyse d'octet d'octet de longueur de longueur inconnue suggère de boucler dans le tableau et à trouver manuellement le caractère de terminaison null, mais je me demandais si le constructeur de string le fera automatiquement. J'assume également que le brandie par défaut du système sera utilisé sur toutes les extrémités.

25
Phillip
byte arr[] = ...
Charset charset = ...
int i;
for (i = 0; i < arr.length && arr[i] != 0; i++) { }
String str = new String(arr, 0, i, charSet);

Remarques:

  • Il est généralement judicieux d'utiliser un paramètre Charset explicite de sorte que votre application ne dépend pas de la liste de caractères/codage par défaut de la plate-forme.

  • Cela ne fonctionnera pas pour certains caractères. Par exemple, une chaîne codée UTF-16 ne peut pas être représentée en toute sécurité comme une séquence d'octets à terminaison zéro, car de nombreuses unités de code contiennent des octets zéro. (D'autre part, UTF-8 est correct à condition que la chaîne ne contienne aucune instance de point de code zéro; voir CAN UTF-8 contient zéro octet? ) ==) ==) ==)

... Mais je me demandais si le constructeur de string le fera automatiquement.

Non, ils ne le feront pas. (Ne me demande pas "... Lisez le Javadoc :-))

J'assume également que le brandie par défaut du système sera utilisé sur toutes les extrémités.

Si vous ne spécifiez pas de caractères, le Java Platform's Platform sera utilisé. Ceci est probablement le système Par défaut, mais ce n'est pas garanti.

21
Stephen C

que dis-tu de ça:

String str = new String(arr).split("\0")[0];
11
davogotland

essayez ceci: string s = nouvelle chaîne (arr) .trim ()

10
Eric