usar studio programacion móviles example desarrollo curso codigo borderfactory aplicaciones java unicode number-systems apache-commons-lang3

java - studio - ¿Por qué Apache Commons considera ''१२३'' numérico?



programacion android pdf 2018 (5)

El símbolo १२३ es el mismo que 123 para el idioma nepalés o cualquier otro idioma que use la escritura Devanagari , como hindi, gujarati, etc.

De acuerdo con la documentación de Apache Commons Lang para StringUtils.isNumeric() , la cadena ''१२३'' es numérica.

Como creía que esto podría ser un error en la documentación, realicé pruebas para verificar la declaración. Descubrí que según Apache Commons es numérico.

¿Por qué es esta cadena numérica? ¿Qué representan esos personajes?


Los símbolos ''१२३'' en realidad se derivan del idioma hindi (Básicamente del idioma sánscrito, es decir, Devanagiri) que representan valores numéricos como:

१ representa 1

२ representa 2

y de la misma manera


Porque esa "CharSequence contiene solo dígitos Unicode" (citando su StringUtils.isNumeric() ).

Todos los caracteres devuelven verdadero para Character.isDigit :

Algunos rangos de caracteres Unicode que contienen dígitos:

  • ''/ u0030'' a ''/ u0039'', dígitos ISO-LATIN-1 (''0'' a ''9'')
  • ''/ u0660'' a ''/ u0669'', dígitos árabe-índicos
  • ''/ u06F0'' a ''/ u06F9'', dígitos árabes-índicos extendidos
  • ''/ u0966'' hasta ''/ u096F'', dígitos de Devanagari
  • ''/ uFF10'' a ''/ uFF19'', dígitos de ancho completo

Muchos otros rangos de caracteres también contienen dígitos.

१२३ son dígitos de Devanagari:


Puedes usar Character#getType para verificar la categoría general del personaje:

System.out.println(Character.DECIMAL_DIGIT_NUMBER == Character.getType(''१''));

Esto imprimirá true , que es una "evidencia" de que ''१'' es un número de dígito .

Ahora examinemos el valor unicode del carácter ''१'':

System.out.println(Integer.toHexString(''१'')); // 967

Este número está en el rango de dígitos de Devanagari , que es: /u0966 hasta /u096F .

Intenta también:

Character.UnicodeBlock block = Character.UnicodeBlock.of(''१''); System.out.println(block.toString()); // DEVANAGARI

Devanagari es:

es un alfabeto abugida (alfasilábico) de India y Nepal

"१२३" es un "123" (latín básico unicode).

Leyendo:


Si alguna vez quiere saber qué propiedades tiene un "personaje" particular (y hay bastantes), vaya directamente a la fuente: Unicode.org . Tienen herramientas de investigación que pueden mostrarle casi todo lo que le gustaría saber.

TENGA EN CUENTA: El Consorcio Unicode produce una especificación, no un software. Esto significa que corresponde a cada proveedor de software implementar la especificación con la mayor precisión posible . Entonces, al igual que HTML, JavaScript, CSS, SQL, etc., hay una variación entre diferentes plataformas, idiomas, etc. Por ejemplo, encontré un error en .NET Framework de Microsoft por el cual las letras latinas AZ y az - los puntos de código 0x24B6 a 0x24E9 - no se registran correctamente como char.IsLetter = true ( informe de error aquí ) Y eso conduce a un comportamiento inesperado en la funcionalidad relacionada, como cuando se llama al método TextInfo.ToTitleCase() ( informe de error aquí ).