2014-09-13 4 views
4

J'ai besoin de faire des choses avec des codes et une nouvelle ligne. J'ai une fonction qui prend un codepoint char, et si c'est \r il doit se comporter différemment. J'ai ceci:Quelle est la manière de propper pour obtenir le point de code d'un char?

if (codePoint == Character.codePointAt(new char[] {'\r'}, 0)) { 

mais qui est très laid et certainement pas la bonne façon de le faire. Quelle est la bonne méthode pour le faire?

(je sais que je pourrais hardcode le nombre 13 (identifiant décimal pour \r) et l'utiliser, mais cela qui rendrait pas clair ce que je fais ...)

Répondre

6

Si vous savez que tous vos commentaires va être dans le plan multilingue de base (U + 0000 à U + FFFF), vous pouvez simplement utiliser:

char character = 'x'; 
int codePoint = character; 

qui utilise la conversion implicite de char à int, comme spécifié dans JLS 5.1.2:

19 conversions spécifiques sur des types primitifs sont appelés les conversions d'élargissement primitives:

  • ...
  • char à int, long, float, ou double

...

Une conversion étendue d'un caractère à un type T zéro étend la représentation intégrale de la valeur char pour remplir le format plus large.

Cependant, un char est seulement un code UTF-16 unité. Le point de Character.codePointAt est qu'il fait face à des points de code en dehors du BMP, qui sont composés d'une paire de substitution - deux unités de code UTF-16 qui se rejoignent pour former un seul caractère.

De JLS 3.1:

La norme Unicode a été initialement conçu en tant que largeur fixe codage de caractères de 16 bits. Il a depuis été modifié pour permettre les caractères dont la représentation nécessite plus de 16 bits. La plage de points de code légale est maintenant U + 0000 à U + 10FFFF, en utilisant la notation hexadécimale U + n. Les caractères dont les points de code sont supérieurs à U + FFFF sont appelés caractères supplémentaires. Pour représenter la gamme complète des caractères en utilisant uniquement des unités de 16 bits, la norme Unicode définit un codage appelé UTF-16.Dans ce codage, les caractères supplémentaires sont représentés par des paires d'unités de code de 16 bits, le premier de la gamme des substituts élevés (U + D800 à U + DBFF), le second de la gamme des substituts inférieurs (U + DC00 à U + DFFF). Pour les caractères compris entre U + 0000 et U + FFFF, les valeurs des points de code et des unités de code UTF-16 sont les mêmes.

Si vous devez être capable de faire face à cette situation plus compliquée, vous aurez besoin du code le plus compliqué.

4

Si je comprends bien votre question , vous pouvez simplement jeter le char à un int, quelque chose comme ça

char ch = '\r'; 
int codePoint = (int) ch; 
System.out.println(codePoint); 

sortie est

13 
+0

Ah, c'est ce qui peut être fait. Je n'aurais pas deviné ça; Je cherchais des méthodes dans 'Character' pour le faire. Cela semble fonctionner pour ce dont j'avais besoin, merci. – Pokechu22

Questions connexes