Apache Commons는 왜 '१२३'숫자를 고려합니까?


101

에 대한 Apache Commons Lang의 문서에 따르면 StringUtils.isNumeric()'१२३'문자열은 숫자입니다.

문서의 실수라고 생각했기 때문에 테스트를 실행하여 진술을 확인했습니다. 나는 아파치 코 몬즈에 따라이 발견 입니다 숫자.

이 문자열이 숫자 인 이유는 무엇입니까? 그 캐릭터들은 무엇을 상징합니까?


61
아마도 그들은 어떤 언어로 숫자를 나타냅니다. 모든 언어가 숫자를 나타내는 데 0에서 9까지의 기호를 사용하는 것은 아닙니다.
Eran 2016 년

165
힌디어로 1, 2, 3입니다
Blip

11
으로 정수 값을 얻을 수 있습니다 Integer.parseInt("१२३").
saka1029

9
@ dan04 숫자가 아니라 특정 상수를 나타내는 데 널리 사용되는 문자입니다. ⅯⅭ과 의 차이점에 유의하십시오 MC.
리트

답변:


198

"CharSequence에는 유니 코드 숫자 만 포함"( 링크 된 문서 인용)이 있기 때문 입니다.

모든 문자는 Character.isDigit다음에 대해 true를 반환합니다 .

숫자를 포함하는 일부 유니 코드 문자 범위 :

  • '\ u0030'~ '\ u0039', ISO-LATIN-1 숫자 ( '0'~ '9')
  • '\ u0660'~ '\ u0669', 아랍어-인도 숫자
  • '\ u06F0'~ '\ u06F9', 확장 아랍어-인도 숫자
  • '\ u0966'~ '\ u096F', 데바 나가리 숫자
  • '\ uFF10'~ '\ uFF19', 전자 숫자

다른 많은 문자 범위에도 숫자가 포함됩니다.

१२३ 데바 나가리 숫자 :


11
@Joker_vD 글쎄, 당신은 어떤 과부하를 지정하지 않았으므로 예, 확실 Integer.parseInt("222", 2)합니다.
Andy Turner

4
@Joker_vD 어렵지도 않습니다. 지원되지 않는 언어가 많이 있습니다. 그렇더라도 亿10 ^ 8-> 이것을 3의 거듭 제곱으로 나타내는 Chinise 가 있으면 오버플로가 발생합니다. 숫자 시스템 목록
세드릭의 Reichenbach

13
@CedricReichenbach : 주요 차이점은 亿는 숫자 이지만 (None이 아닌 Numeric_Type 값 중 하나를 갖는 표준에 따라,이 경우에는 Numeric_Type = Numeric) 어떤 종류의 숫자도 아닙니다 . (그렇다고하더라도 3의 거듭 제곱으로 받아들이지 않을 것입니다. 기수숫자가 아닌 다양한 거듭 제곱으로 올릴 것 입니다.) parseInt숫자가 필요하며 혼란스럽게도이 isNumeric질문 의 방법은 10 진수 문자 ( 더 넓은 범주의 숫자 대신 General_Category = Decimal_Number).
user2357112는 Monica를 지원합니다.

10
Devangari 숫자의 전체 세트는 ०१२३४५६७८९입니다.
dan04

2
@ v7d8dpo4 (s) 그는 Integer.parseInt()3 자 숫자 입력 문자열에 대해 예외를 throw하는 방법이 있는지 물었습니다 .
Andy Turner

59

기호 १२३ 은 네팔어 또는 힌디어, 구자라트 어 등과 같은 Devanagari 스크립트를 사용하는 다른 언어의 경우 123과 동일 하므로 Apache Commons의 숫자입니다.


3
아라비아 숫자로 거의 "123"처럼 보입니다.
Panzercrisis

41
아랍인들은 인도인에게서 숫자를 얻었습니다.

5
@rahul 아라비아 숫자는 일반적으로 생각하는 ١-٩이 아닌 1-9입니다.
Maroun 2016-10-22

26

Character#getType캐릭터의 일반 카테고리를 확인하는 데 사용할 수 있습니다 .

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

이렇게하면 true'१'이 숫자 라는 "증거" 가 인쇄됩니다 .

이제 '१'문자의 유니 코드 값을 살펴 보겠습니다.

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

이 숫자의 범위에 데바 나가리 숫자 :이다 - \u0966을 통해 \u096F.

또한 시도하십시오 :

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

Devanagari 는 다음과 같습니다.

인도와 네팔의 아부 기다 (알파 음순) 알파벳입니다.

"१२३"은 "123"(기본 라틴 유니 코드)입니다.

독서:


1
블록 DECIMAL_DIGIT_NUMBER에있는 것보다 유형이라는 것이 더 중요합니다 DEVANAGARI. 그 블록에도 숫자가 아닌 문자가 있습니다.
Andy Turner

23

특정 "문자"에 어떤 속성이 있는지 알고 싶다면 (그리고 꽤 많은 속성이 있음) 소스로 직접 이동하십시오 : Unicode.org . 그들은 당신이 알고 싶은 대부분의 것을 보여줄 수있는 조사 도구를 가지고 있습니다.

기억하기 : 유니 코드 컨소시엄은 소프트웨어가 아닌 사양을 생성합니다. 즉, 가능한 한 정확하게 사양을 구현하는 것은 각 소프트웨어 공급 업체의 몫 입니다. 따라서 HTML, JavaScript, CSS, SQL 등과 마찬가지로 다양한 플랫폼, 언어 등이 다릅니다. 예를 들면, 나는 라틴 문자를 원함으로써 마이크로 소프트의 .NET 프레임 워크에서이 문제를 발견 A-Z하고 a-z제대로 것으로 등록하지 않은 - 0x24E9을 통해 코드 0x24B6 포인트를 - char.IsLetter = true( 여기에 버그 리포트 ). 그리고 이로 인해 TextInfo.ToTitleCase()메서드를 호출 할 때와 같이 관련 기능에서 예기치 않은 동작이 발생합니다 ( 여기에서 버그 보고서 ).


1
훌륭한 참조! (그들은 유니 코드가 정상을 넘어
섰는

1
이러한 종류의 참조를 로컬에서 사용하려면 uniprops를 설치할 수 있습니다.
TRiG

2
@TRiG 언급 해 주셔서 감사합니다. 흥미로운 유틸리티. 처음 3 개의 링크 (원래 세트)에 표시된 일부 기능을 다루지 만, Unicode.org에서 수행 할 수있는 고급 쿼리를 표시하는 일부 추가 링크를 포함하도록 답변을 업데이트했습니다. 를 통해 uniprops. 또한 uniprops지난 6 월 유니 코드가 9.0 버전을 출시 한만큼 한 버전 뒤쳐진 것으로 보입니다 .
Solomon Rutzky

19

'१२३'기호는 실제로 다음과 같이 숫자 값을 나타내는 힌디어 (기본적으로 산스크리트어 즉 데바 나기 리어에서 유래)에서 파생됩니다.

१ 대표 1

२는 2를 나타냅니다.

그리고 마찬가지로


4
수정 : '१२३'기호는 실제로 산스크리트어 에서 파생 된 것 입니다 (즉, 다른 포스터에서 언급 한대로 Devanagiri 스크립트)
Happy Green Kid Naps

Devanāgarī가 얼마나 최근에 현재의 형태를 취했는지 알고 놀랐습니다 – 산스크리트어가 성문화 된 지 수세기가 지났습니다! 그래서 나는 숫자가 일반적으로 인도 문화보다 산스크리트어에 더 많이 속한다는 주장에 회의적입니다.
Anton Sherwood
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.