Warum betrachtet Apache Commons ‘१२३’ als numerisch?

Lesezeit: 6 Minuten

Benutzer-Avatar
Hannes

Laut der Dokumentation von Apache Commons Lang für StringUtils.isNumeric()der String ‘१२३’ ist numerisch.

Da ich glaubte, dass dies ein Fehler in der Dokumentation sein könnte, führte ich Tests durch, um die Aussage zu überprüfen. Ich habe das laut Apache Commons gefunden ist numerisch.

Warum ist dieser String numerisch? Was stellen diese Zeichen dar?

  • Vielleicht repräsentieren sie Ziffern in irgendeiner Sprache. Nicht alle Sprachen verwenden die Symbole 0 bis 9 zur Darstellung von Ziffern.

    – Eran

    20. Oktober 2016 um 8:00 Uhr

  • Dies sind 1, 2 und 3 in Hindi

    – Blip

    20. Oktober 2016 um 8:01 Uhr

  • Sie können den ganzzahligen Wert erhalten durch Integer.parseInt("१२३").

    Benutzer4910279

    20. Oktober 2016 um 8:27 Uhr

  • @dan04 Das sind keine Zahlen, das sind Buchstaben, die beliebt sind, um bestimmte Konstanten darzustellen. Beachten Sie den Unterschied zwischen ⅯⅭ und MC.

    – Gerrit

    21. Oktober 2016 um 1:17 Uhr

  • Deshalb ist \d weniger effizient als [0-9]. Soll ich \d oder verwenden [0-9] um Ziffern in einer Perl-Regex abzugleichen?

    – phuklv

    21. Oktober 2016 um 4:46 Uhr


Benutzer-Avatar
Andy Turner

Da diese “CharSequence nur Unicode-Ziffern enthält” (unter Angabe Ihrer verlinkte Dokumentation).

Alle Zeichen geben wahr für zurück Character.isDigit:

Einige Unicode-Zeichenbereiche, die Ziffern enthalten:

  • ‘\u0030’ bis ‘\u0039’, ISO-LATIN-1-Ziffern (‘0’ bis ‘9’)
  • ‘\u0660’ bis ‘\u0669’, arabisch-indische Ziffern
  • ‘\u06F0’ bis ‘\u06F9’, erweiterte arabisch-indische Ziffern
  • ‘\u0966’ bis ‘\u096F’, Devanagari-Ziffern
  • ‘\uFF10’ bis ‘\uFF19’, Ziffern in voller Breite

Viele andere Zeichenbereiche enthalten auch Ziffern.

१२३ sind Devanagari-Ziffern:

  • @Joker_vD Nun, Sie haben nicht angegeben, welche Überladung, also ja, sicher: Integer.parseInt("222", 2).

    – Andy Turner

    20. Oktober 2016 um 10:47 Uhr


  • @Joker_vD Es ist nicht einmal schwer; Es gibt viele nicht unterstützte Sprachen. Selbst wenn ja, gibt es die Chinise 亿was 10^8 darstellt -> dies hoch 3 würde einen Überlauf verursachen. Liste der Zahlensysteme

    – Cédric Reichenbach

    20. Oktober 2016 um 13:48 Uhr


  • @CedricReichenbach: Der Hauptunterschied besteht darin, dass while 亿 ist numerisch (nach den Standards, einen der Nicht-None-Werte von Numeric_Type zu haben, in diesem Fall Numeric_Type=Numeric), ist es keine Art von Ziffer. (Selbst wenn es so wäre, würden Sie es nicht mit 3 potenzieren; Sie würden die erhöhen Wurzel zu verschiedenen Befugnissen, nicht die Ziffern.) parseInt erfordert Ziffern, und vielleicht verwirrend, die isNumeric -Methode in dieser Frage testet auf Dezimalziffern (General_Category=Decimal_Number) anstelle einer breiteren Kategorie numerischer Zeichen.

    – Benutzer2357112

    20. Oktober 2016 um 19:48 Uhr

  • Der vollständige Satz von Devangari-Ziffern ist ०१२३४५६७८९.

    – dan04

    20. Oktober 2016 um 23:28 Uhr

  • @ v7d8dpo4 (s) er fragte, ob es einen Weg gebe Integer.parseInt() um eine Ausnahme für eine 3-stellige numerische Eingabezeichenfolge auszulösen.

    – Andy Turner

    21. Oktober 2016 um 8:57 Uhr

Benutzer-Avatar
ΦXocę 웃 Пepeúpa ツ

Das Symbol १२३ ist dasselbe wie 123 für die nepalesische Sprache oder jede andere Sprache, die die verwendet Devanagari-Skript wie Hindi, Gujarati usw. und ist daher eine Nummer für Apache Commons.

  • Das Ding sieht fast aus wie “123” in arabischen Ziffern.

    – Panzerkrise

    21. Oktober 2016 um 18:50 Uhr

  • Die Araber haben ihre Ziffern von den Indern bekommen.

    Benutzer2797321

    21. Oktober 2016 um 20:31 Uhr

  • @rahul Arabische Zahlen sind 1-9, nicht ١-٩, wie allgemein angenommen.

    – Marun

    22. Oktober 2016 um 6:50 Uhr


Benutzer-Avatar
Maroun

Sie können verwenden Character#getType um die allgemeine Kategorie des Charakters zu überprüfen:

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

Dies wird gedruckt truewas ein “Beweis” dafür ist, dass ‘१’ ein ist Ziffer.

Lassen Sie uns nun den Unicode-Wert des Zeichens „१“ untersuchen:

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

Diese Nummer liegt im Bereich von Devanagari-Ziffern – welches ist: \u0966 durch \u096F.

Probiere auch:

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

Devanagari ist:

ist ein abugida (alphasyllabary) Alphabet von Indien und von Nepal

“१२३” ist eine “123” (Basic Latin Unicode).

Lektüre:

  • Es ist wichtiger, dass sie vom Typ sind DECIMAL_DIGIT_NUMBER als dass sie in der sind DEVANAGARI Block. Es gibt auch Buchstaben ohne Ziffern in diesem Block.

    – Andy Turner

    20. Oktober 2016 um 8:10 Uhr


Benutzer-Avatar
Solomon Rutzky

Wenn Sie jemals wissen möchten, welche Eigenschaften ein bestimmter “Charakter” hat (und es gibt ziemlich viele), gehen Sie direkt zur Quelle: Unicode.org. Sie haben Forschungswerkzeuge, die Ihnen fast alles zeigen können, was Sie wissen möchten.

MERKEN SIE SICH: Das Unicode-Konsortium erstellt eine Spezifikation, keine Software. Das bedeutet, dass es jedem Softwarehersteller überlassen bleibt, die Spezifikation umzusetzen so genau sie können. Genau wie bei HTML, JavaScript, CSS, SQL usw. gibt es Unterschiede zwischen verschiedenen Plattformen, Sprachen usw. Zum Beispiel habe ich einen Fehler in Microsofts .NET Framework gefunden, bei dem lateinische Buchstaben eingekreist wurden A-Z und a-z — Codepunkte 0x24B6 bis 0x24E9 — werden nicht richtig als Wesen registriert char.IsLetter = true (Fehlerbericht hier). Und das führt zu unerwartetem Verhalten in verwandten Funktionen, z. B. beim Aufrufen der TextInfo.ToTitleCase() Methode (Fehlerbericht hier).

Benutzer-Avatar
Nayan Katkani

Die Symbole ‘१२३’ stammen eigentlich aus der Hindi-Sprache (im Wesentlichen aus der Sanskrit-Sprache, dh Devanagiri), die numerische Werte darstellen, genau wie:

१ repräsentieren 1

२ repräsentieren 2

und ebenfalls

  • KORREKTUR: Die Symbole ‘१२३’ sind eigentlich abgeleitet von Sanskrit Sprache (dh Devanagiri-Skript, wie andere Poster angemerkt haben)

    – Happy Green Kid Nickerchen

    20. Oktober 2016 um 16:37 Uhr


  • Ich war überrascht zu erfahren, wie erst vor kurzem Devanāgarī seine heutige Form angenommen hat – viele Jahrhunderte nachdem Sanskrit kodifiziert wurde! Daher bin ich skeptisch gegenüber der Behauptung, dass die Ziffern eher zum Sanskrit als zur indischen Kultur im Allgemeinen gehören.

    – Anton Scherwood

    22. Oktober 2016 um 3:55 Uhr

  • KORREKTUR: Die Symbole ‘१२३’ sind eigentlich abgeleitet von Sanskrit Sprache (dh Devanagiri-Skript, wie andere Poster angemerkt haben)

    – Happy Green Kid Nickerchen

    20. Oktober 2016 um 16:37 Uhr


  • Ich war überrascht zu erfahren, wie erst vor kurzem Devanāgarī seine heutige Form angenommen hat – viele Jahrhunderte nachdem Sanskrit kodifiziert wurde! Daher bin ich skeptisch gegenüber der Behauptung, dass die Ziffern eher zum Sanskrit als zur indischen Kultur im Allgemeinen gehören.

    – Anton Scherwood

    22. Oktober 2016 um 3:55 Uhr

1297790cookie-checkWarum betrachtet Apache Commons ‘१२३’ als numerisch?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy