java - Perché il numero '123' è numerico?





unicode apache-commons-lang3 (5)


Perché "CharSequence contiene solo cifre Unicode" (citando la tua documentazione collegata ).

Tutti i caratteri restituiscono true per Character.isDigit :

Alcuni intervalli di caratteri Unicode che contengono cifre:

  • '\ u0030' attraverso '\ u0039', cifre ISO-LATIN-1 (da '0' a '9')
  • '\ u0660' fino a '\ u0669', cifre in arabo
  • '\ u06F0' attraverso '\ u06F9', cifre dell'indice arabo esteso
  • '\ u0966' fino a '\ u096F', cifre di Devanagari
  • '\ uFF10' fino a '\ uFF19', cifre Fullwidth

Anche molti altri intervalli di caratteri contengono cifre.

१२३ sono cifre di Devanagari:

Secondo la documentazione, la stringa "123" è numerica.

Poiché credevo che questo potesse essere un errore nella documentazione, ho eseguito dei test per verificare la dichiarazione. Ho scoperto che secondo Apache Commons è numerico.

Perché questa stringa numerica? Cosa rappresentano quei personaggi?




Puoi utilizzare Character#getType per controllare la categoria generale del personaggio:

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

Questo verrà stampato true , che è una "prova" che "1" è un numero di cifre .

Ora esaminiamo il valore unicode del carattere "1":

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

Questo numero è compreso nell'intervallo di cifre Devanagari , ovvero: \u0966 attraverso \u096F .

Prova anche:

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

Devanagari è:

è un alfabeto abugida (alphasyllabary) dell'India e del Nepal

"123" è un "123" (Unicode latino di base).

Lettura:




I simboli "123" sono in realtà derivati ​​dalla lingua hindi (fondamentalmente dal linguaggio sanscrito, ovvero Devanagiri) che rappresentano valori numerici come:

1 rappresenta 1

2 rappresentano 2

e come saggio




Il simbolo 123 è lo stesso di 123 per la lingua nepalese o qualsiasi altra lingua che utilizza la scrittura Devanagari come Hindi, Gujarati e così via, ed è quindi un numero per Apache Commons.




import java.util.Date;
import java.util.Random;

public class RandomGenerator {

  private static Random random = new Random((new Date()).getTime());

    public static String generateRandomString(int length) {
      char[] values = {'a','b','c','d','e','f','g','h','i','j',
               'k','l','m','n','o','p','q','r','s','t',
               'u','v','w','x','y','z','0','1','2','3',
               '4','5','6','7','8','9'};

      String out = "";

      for (int i=0;i<length;i++) {
          int idx=random.nextInt(values.length);
          out += values[idx];
      }
      return out;
    }
}




java unicode apache-commons-lang3