Selon la documentation d'Apache Commons Lang pour StringUtils.isNumeric()
, la chaîne '१२३' est numérique.
Puisque je pensais que cela pourrait être une erreur dans la documentation, j'ai effectué des tests pour vérifier cette déclaration. J'ai trouvé que, selon Apache Commons, il est numérique.
Pourquoi cette chaîne est-elle numérique? Que représentent ces personnages?
Parce que "CharSequence ne contient que des chiffres Unicode" (citant votre documentation liée ).
Tous les caractères retournent vrais pour Character.isDigit
:
Certaines plages de caractères Unicode contenant des chiffres:
- "\ u0030" à "\ u0039", chiffres ISO-LATIN-1 ("0" à "9")
- '\ u0660' à '\ u0669', chiffres arabe-indien
- '\ u06F0' à '\ u06F9', chiffres étendus arabe-indien
- '\ u0966' à '\ u096F', chiffres en devanagari
- '\ uFF10' à '\ uFF19', chiffres pleine largeur
De nombreuses autres plages de caractères contiennent également des chiffres.
१२३
sont des chiffres Devanagari:
Le symbole est identique à 123 pour le népalais ou toute autre langue utilisant le script Devanagari , tel que l'hindi, le gujarati. , etc., et constitue donc un numéro pour Apache Commons.
Vous pouvez utiliser Character#getType
pour vérifier la catégorie générale du personnage:
System.out.println(Character.DECIMAL_DIGIT_NUMBER == Character.getType('१'));
Ceci imprimera true
, ce qui est une "preuve" que "१" est un chiffre nombre.
Examinons maintenant la valeur unicode du caractère '':
System.out.println(Integer.toHexString('१'));
// 967
Ce nombre est dans la gamme de chiffres Devanagari - qui est: \u0966
par \u096F
.
Essayez aussi:
Character.UnicodeBlock block = Character.UnicodeBlock.of('१');
System.out.println(block.toString());
// DEVANAGARI
Devanagari est:
est un alphabet abugida (alphasyllabary) de l'Inde et du Népal
"" Est un "123" (unicode de base en latin).
En train de lire:
Si vous voulez savoir quelles propriétés a un "personnage" particulier (et il y en a beaucoup), allez directement à la source: Unicode.org . Ils ont des outils de recherche qui peuvent vous montrer presque tout ce que vous voudriez savoir.
Si vous voulez voir toutes les propriétés d'un caractère spécifique, essayez ce qui suit:
http://unicode.org/cldr/utility/character.jsp?a=१
ou:
Si vous souhaitez voir tous les caractères classés en "chiffres décimaux" (c'est-à-dire avec des valeurs numériques comprises entre 0 et 9), essayez les solutions suivantes:
http://unicode.org/cldr/utility/list-unicodeset.jsp?a: Numeric_Type = Decimal:]
(550 points de code - actuellement/à partir de Unicode 9.0)
Si vous souhaitez voir tous les caractères classés comme "nombres à chiffres non décimaux" (c.-à-d. Fractions, entourés, etc.), essayez ce qui suit:
http://unicode.org/cldr/utility/list-unicodeset.jsp?a= [: Numeric_Type = Numeric:]
(836 points de code - actuellement/à partir de Unicode 9.0)
Si vous souhaitez voir tous les caractères classés en "chiffres décimaux" (c'est-à-dire avec des valeurs numériques comprises entre 0 et 9), == [- mais uniquement jusqu'à la version Unicode 6.0 (utilisée par .NET), essayez ce qui suit:
http://unicode.org/cldr/utility/list-unicodeset.jsp?a: Numeric_Type = Decimal:]% 26 [: Age = 6.0:]
(420 points de code - et ne devrait pas changer)
Si vous souhaitez voir tous les caractères classés en "chiffres décimaux" (c'est-à-dire avec des valeurs numériques comprises entre 0 et 9), mais uniquement jusqu'à la version Unicode 6.0 (utilisée par .NET), == [- et uniquement dans le plan Base-multilingue/aucun caractère supplémentaire (c'est-à-dire rien au-dessus du code 65535/U + 0xFFFF), essayez ce qui suit:
http://unicode.org/cldr/utility/list-unicodeset.jsp?a: Numeric_Type = Decimal:]% 26 [: Age = 6.0:]% 26 [: bmp = Yes:]
(350 points de code - et ne devrait pas changer)
GARDER À L'ESPRIT: Le consortium Unicode produit une spécification, pas un logiciel. Cela signifie que chaque éditeur de logiciel doit mettre en œuvre la spécification == [- aussi précisément que possible. Donc, tout comme HTML, JavaScript, CSS, SQL, etc., il existe des variations entre les différentes plates-formes, langues, etc. Par exemple, j'ai trouvé un bogue dans le .NET Framework de Microsoft qui encerclait les lettres latines A-Z
Et a-z
- Les points de code 0x24B6 à 0x24E9 - ne s'enregistrent pas correctement en tant que char.IsLetter = true
( rapport de bug ici ). Et cela entraîne un comportement inattendu dans les fonctionnalités associées, comme lors de l'appel de la méthode TextInfo.ToTitleCase()
( rapport de bogue ici ).
Les symboles '१२३' sont en fait dérivés de la langue hindi (essentiellement de la langue sanskrit c'est-à-dire Devanagiri) qui représente des valeurs numériques telles que:
१ représente 1
Représente 2
et également