Pourquoi Apache Commons, envisager de १२३' numérique?
Selon Apache Commons Lang de la documentation de StringUtils.isNumeric()
, la Chaîne " १२३ " est numérique.
Depuis que je croyais que ce pourrait être une erreur dans la documentation, j'ai couru des tests pour vérifier l'état. J'ai trouvé que, selon Apache Commons il est numérique.
Pourquoi cette Chaîne numérique? Que ces personnages représentent?
- Peut-être qu'ils représentent des chiffres dans certaines langues. Pas toutes les langues utilisent les symboles 0 à 9 pour représenter les chiffres.
- ce sont 1, 2 et 3 en hindi
- Vous pouvez obtenir la valeur de l'entier par
Integer.parseInt("१२३")
. "ⅯⅭⅯⅬⅩⅩⅩⅤ".isnumeric()
est aussi Vrai (en Python, mais sans doute en Java trop), comme c'est"⅕".isnumeric()
- Voir aussi: stackoverflow.com/q/40156585/974555
- étape 1: réaliser que ces personnages ne sont pas dans l'alphabet. étape 2: rendre compte que c'est probablement une autre langue. etape 3: laissez google translate comprendre: translate.google.com/#auto/en/%E0%A5%A7%E0%A5%A8%E0%A5%A9
- Mais qu'en est
"π".isnumeric()
ou"e".isnumeric()
? - Ceux ne sont pas des numéros, ce sont des lettres qui sont populaires pour représenter particulier des constantes. Notez la différence entre
ⅯⅭ
etMC
. - C'est pourquoi \d est moins efficace que [0-9]. dois-je utiliser \d ou [0-9] pour correspondre à des chiffres dans une expression rationnelle Perl?
- Pas en Java. En Java,
\d
est synonyme de[0-9]
. Il ne correspondra pas à la Devanagari chiffres. - Ce n'est pas l'Hindi. Il est Devanagari chiffre.
- Si vous utilisez Firefox, obtenir l'identité des Personnages de l'extension!
- n'est-ce pas l'Hindi habituellement écrit en Devanagari?
- Oui, et donc, sont le Marathi, le Bhojpuri, Awadhi, Magahi, Maithili, le Népalais, le Pali, le Konkani, Bodo, le Sindhi et le Sanskrit et beaucoup plus. Devanagari est un script, comme le Latin, l'Hindi, le Marathi sont des langues comme l'anglais.
- Alors, comment pouvez-Sujan dire que c'est pas l'Hindi (plutôt que “ce n'est pas nécessairement de l'Hindi”)?
- Bienvenue à Unicode 🙂
- de son fond de
sanskrit
,0
a été inventé dans cette langue, si vous faites une simple recherche google sur le sanskrit numéros, vous obtiendrez cette case à cette référence (2indya.com/2011/06/22/sanskrit-counting-1-to-100) - Pourquoi pensez-vous que la documentation était dans l'erreur?
- GNU Calculatrice (Linux graphique app) reconnaissent également que numérique (cependant, le résultat est montré int Chiffres arabes): १२३+0=123; १२३+100=223; १२३+0=123; १२३+123=246
Vous devez vous connecter pour publier un commentaire.
Parce que "CharSequence contient uniquement Unicode chiffres" (en citant votre liés à la documentation).
Tous les caractères return true pour
Caractère.appel isdigit
:१२३
sont Devanagari chiffres:१
est DEVANAGARI CHIFFRES,\u0967
२
est DEVANAGARI CHIFFRE DEUX,\u0968
३
est DEVANAGARI CHIFFRE TROIS,\u0969
Integer.parseInt("222", 2)
.亿
, ce qui représente 10^8 -> ce à la puissance de 3 serait la cause d'un dépassement de capacité. Liste de chiffre systèmesInteger.parseInt()
sera probablement voués à l'échec si les chiffres ne sont pas destinés à être consécutifs (comme les japonais les numéros 1, 2, 3, ...)parseInt
nécessite chiffres, et peut-être prêter à confusion, laisNumeric
méthode, dans cette question, les tests pour les chiffres caractères (General_Category=Decimal_Number) au lieu d'une catégorie plus large des caractères numériques.०१२३४५६७८९
.Integer.parseInt()
lancer une exception pour les 3 caractères numériques de la chaîne d'entrée.Le symbole १२३ est le même que 123 de la langue Népalaise ou toute autre langue à l'aide de la Script Devanagari, telles que le Hindi, Gujarati, et ainsi de suite, et ne fait donc un certain nombre de Apache Commons.
Vous pouvez utiliser
Caractère#getType
pour vérifier le caractère général de la catégorie:Cette impression sera
true
, qui est une "preuve" que "१' est un chiffres.Maintenant, nous allons examiner la valeur unicode du '१ caractère':
Ce numéro se trouve sur la plage de Devanagari chiffres - qui est:
\u0966
par\u096F
.Essayez aussi:
Devanagari est:
"१२३" est un "123" (Latin de Base unicode).
Lecture:
StringUtils#isNumeric
de la mise en œuvreDECIMAL_DIGIT_NUMBER
qu'ils sont dans leDEVANAGARI
bloc. Il y a des chiffres, des lettres dans ce bloc de trop.Si jamais vous voulez savoir ce que les propriétés d'un "caractère" a (et il y en a quelques-uns), aller directement à la source: Unicode.org. Ils ont des outils de recherche qui peut vous montrer la plupart tout ce que vous voulez bien connaître.
Si vous voulez voir toutes les propriétés d'un caractère spécifique, essayez les solutions suivantes:
http://unicode.org/cldr/utility/character.jsp?a=१
ou:
http://unicode.org/cldr/utility/character.jsp?a=%E0%A5%A7
Si vous voulez voir tous les caractères classés comme "décimales" (c'est à dire avec des valeurs de 0 à 9), essayez les solutions suivantes:
http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5B:Numeric_Type=Décimal:%5D
( 550 Points de Code-actuellement /comme de l'Unicode 9.0 )
Si vous voulez voir tous les caractères classés comme "non décimale des nombres" (c'est à dire les fractions, cerclé, etc), essayez les solutions suivantes:
http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5B:Numeric_Type=Numérique:%5D
( 836 Points de Code-actuellement /comme de l'Unicode 9.0 )
Si vous voulez voir tous les caractères classés comme "décimales" (c'est à dire avec des valeurs de 0 à 9), mais seulement jusqu'au format Unicode 6.0 (qui .NET utilise), essayez les solutions suivantes:
http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5B:Numeric_Type=Décimal:%5D%26%5B:Âge=6.0:%5D
( 420 Points de Code -- et ne devrait pas changer )
Si vous voulez voir tous les caractères classés comme "décimales" (c'est à dire avec des valeurs de 0 à 9), mais seulement jusqu'au format Unicode 6.0 (qui .NET utilise), et uniquement dans la Base-Plan Multilingue /pas de Caractères Supplémentaires (c'est à dire rien au-dessus de Point de Code 65535 /U+0xFFFF), essayez les solutions suivantes:
http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5B:Numeric_Type=Decimal:%5D%26%5B:Age=6.0:%5D%26%5B:bmp=Yes:%5D
( 350 Points de Code -- et ne devrait pas changer )
GARDER À l'ESPRIT: Le Consortium Unicode produit un cahier des charges, pas de logiciels. Cela signifie qu'il appartient à chaque revendeur de logiciels pour mettre en œuvre la spécification que précisément ils peuvent. Ainsi, tout comme HTML, JavaScript, CSS, SQL, etc, il y a des variations entre les différentes plates-formes, les langues, et ainsi de suite. Par exemple, j'ai trouvé un bogue dans Microsoft .NET Framework lequel encerclé lettres latines
A-Z
eta-z
-- les Points de Code 0x24B6 par 0x24E9-ne pas enregistrer correctement comme étantchar.IsLetter = true
(rapport de bug ici). Et qui conduit à un comportement inattendu des fonctionnalités connexes, comme lors de l'appel de laTextInfo.ToTitleCase()
méthode (rapport de bug ici).uniprops
. Aussi, il semble queuniprops
est une version derrière Unicode version 9.0 de juin dernier.Symboles १२३' sont en fait des dérivés de la langue Hindi(Essentiellement de la langue Sanskrit je.e Devanagiri) qui représentent des valeurs numériques comme:
१ représentent 1
२ représentent 2
et comme sage