Warum betrachtet Apache Commons ‘१२३’ als numerisch?
Lesezeit: 6 Minuten
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
Andy Turner
Da diese “CharSequence nur Unicode-Ziffern enthält” (unter Angabe Ihrer verlinkte Dokumentation).
@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
Φ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
Maroun
Sie können verwenden Character#getType um die allgemeine Kategorie des Charakters zu überprüfen:
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
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.
Wenn Sie alle Eigenschaften eines bestimmten Zeichens sehen möchten, versuchen Sie Folgendes:
Wenn Sie alle Zeichen als “Dezimalziffern” klassifiziert sehen möchten (dh mit Zahlenwerten von 0 bis 9), aber nur bis Unicode 6.0 (das .NET verwendet)Versuche Folgendes:
Wenn Sie alle Zeichen sehen möchten, die als „Dezimalziffern“ klassifiziert sind (d. h. mit Zahlenwerten von 0 bis 9), aber nur bis Unicode 6.0 (das von .NET verwendet wird), und nur in der mehrsprachigen Basisebene / keine ergänzenden Zeichen (dh nichts über Code Point 65535 / U + 0xFFFF)Versuche Folgendes:
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).
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 vonSanskritSprache (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 vonSanskritSprache (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
12977900cookie-checkWarum betrachtet Apache Commons ‘१२३’ als numerisch?yes
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
ⅯⅭ
undMC
.– 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