Question

Test sur quelqu'un elses le code, j'ai remarqué quelques pages JSP impression géniaux caractères non-ASCII. Prendre un bain dans la source que je trouve cette friandise:

// remove any periods from first name e.g. Mr. John --> Mr John
firstName = firstName.trim().replace('.','\0');

Ne remplacer un caractère dans une chaîne avec un caractère nul même travailler en Java? Je sais que '\0' mettra fin à une chaîne C. Serait-ce le coupable des personnages géniaux?

Était-ce utile?

La solution

  

Ne remplacer un caractère dans une chaîne avec un caractère nul même travailler en Java? Je sais que '\ 0' mettra fin à une c-string.

Cela dépend de la façon dont vous définissez ce qui fonctionne. Est-il remplacer toutes les occurrences du caractère cible avec '\0'? Absolument!

String s = "food".replace('o', '\0');
System.out.println(s.indexOf('\0')); // "1"
System.out.println(s.indexOf('d')); // "3"
System.out.println(s.length()); // "4"
System.out.println(s.hashCode() == 'f'*31*31*31 + 'd'); // "true"

Tout semble bien fonctionner pour moi! indexOf peut le trouver, il compte dans le cadre de la longueur, et sa valeur pour le calcul du code de hachage est 0; tout est tel que spécifié par la JLS / API.

ne pas travail si vous prévoyez de remplacer un caractère par le caractère nul supprimerait en quelque sorte que le caractère de la chaîne. Bien sûr, il ne fonctionne pas comme ça. Un caractère nul est toujours un caractère!

String s = Character.toString('\0');
System.out.println(s.length()); // "1"
assert s.charAt(0) == 0;

NE FAIT PAS travail si vous attendez le caractère nul de mettre fin à une chaîne. Il est évident à partir des extraits ci-dessus, mais il est aussi clairement spécifié dans JLS (

Autres conseils

devrait être probablement changé à

firstName = firstName.trim().replaceAll("\\.", "");
  

Est-ce que le remplacement d'un caractère dans une chaîne   avec un caractère nul travail, même dans   Java?

Non.

  

Serait-ce le coupable des personnages géniaux?

Il est fort probable.

Je pense que ce devrait être le cas. Pour effacer le caractère, vous devez utiliser replace(".", "") à la place.

cause des "caractères funky":

System.out.println( "Mr. Foo".trim().replace('.','\0'));

produit:

Mr[] Foo

dans ma console Eclipse, où le [] est affiché comme une boîte carrée. Comme d'autres l'ont, utilisez String.replace().

scroll top