12
votes

Pourquoi Stringbuilder arrête-t-il d'ajouter des éléments après avoir utilisé le caractère null?

Quand j'utilise le caractère null '\ u0000' code>, StringBuilder arrêtera d'ajouter de nouveaux éléments.

Par exemple: p>

. 


5 commentaires

'\ 0' - Terminator NULL, utilisé comme extrémité de la chaîne en cordes C et C ++


Je doute que stringbuilder a cessé d'ajouter de nouveaux éléments. Il s'agit probablement d'un problème dans l'affichage de la chaîne résultante . Quelle est la longueur () du stringbuilder après avoir ajouté quelques éléments?


J'ai couru votre code exact à Eclipse sur JDK 1.6.0_25 sur Win 7 et IT imprime . une. ... pourrait être une chose spécifique à la coque.


Je pense que cela est spécifique au système d'exploitation car les chaînes Java peuvent contenir des caractères nuls. Win7 ici imprime ici la même chose


Impressions .a. ici Ideone.com/bjrkt0


3 Réponses :


7
votes

Le caractère NULL est un caractère réservé qui indique l'extrémité de la chaîne, donc si vous imprimez quelque chose suivi de \ u0000 , rien d'autre après qu'il soit imprimé.


pourquoi StringBuilder arrête d'ajouter des éléments après avoir utilisé le caractère null? Ce n'est pas vraiment Java, c'est votre terminal qui traite \ u0000 comme extraire de la chaîne. < / p>

Comme le dit quelqu'un, avec Windows, la sortie peut être .a. (Je n'ai pas testé), c'est parce que Windows Terminal fonctionne différemment du terminal de systèmes basé sur UNIX. Je suis sûr que si vous exécutez ce code sur une machine OSX, vous obtiendrez la même sortie que celle que vous obtenez sur Linux


6 commentaires

Il imprime un . , une case (pour le caractère null), un A et un . sur la machine Windows.


@Bheeshgurung Je pense que c'est parce que les systèmes UNIX fonctionnent différemment de Windows, théoriquement si vous essayez la même chose sur OSX, il devrait imprimer .


Le caractère NULL n'est pas utilisé pour terminer les chaînes en Java.


NULL est un personnage réservé où? Ni gnome-terminal, Xterm, ni rxvt n'ont le comportement décrit dans la question. Ils ignorent tous le personnage null.


@Rotsor \ u0000 est utilisé comme moyen standard pour mettre fin à une chaîne dans des langages similaires et les terminaux utilisés pour l'utiliser comme "fin de la chaîne". Vous devriez noter que cette question a presque 4 ans. Linux évolue continuellement, les choses peuvent donc avoir changé au cours de ces quatre années. Au moment où la question a été postée, la question était réelle, mais elle a peut-être été résolue entre-temps. Et peut-être aussi que certains terminaux ont toujours ce problème sur Linux. Le fait que votre version de terminal ne puisse pas reproduire le problème ne signifie pas que cette question et ses réponses sont erronées (à moins que vous n'ayez essayé chaque Terminal / Version).


C'est pourquoi je demande et ne disant pas que quelque chose ne va pas. Si vous connaissez un terminal qui le fait, je suis curieux. En tout état de cause, disant qu'il s'agit d'un caractère "réservé" sans préciser quel logiciel le rend réservé n'est pas une très bonne réponse.



7
votes

Votre stringbuilder Ajoutez toujours les éléments, voir: XXX

Je suppose que votre console empêche l'impression après la terminaison \ u0000 personnage. Une console différente pourrait gérer cela différemment.


0 commentaires

1
votes

J'ai essayé votre test, et cela n'a pas échoué dans Eclipse sur mon système Windows 7. Cependant, l'exécution de ce programme d'essai distinguera entre les non-adhérents et les non-impressions. Je suggère de l'exécuter dans l'environnement défaillant. XXX

Si le problème est non ajouté, la longueur sera inférieure à 2, et la tentative d'imprimer le caractère à l'index 1 échouera. Si le problème est non-impression, la longueur sera 2 et le caractère à l'index 1 sera "A".

Je pense que la non-impression est beaucoup plus probable que non-Ajout.


0 commentaires