정규식을 사용하지 않고 Java에서 문자가 문자인지 숫자인지 알 수있는 가장 좋은 방법은 무엇입니까?


125

string.charAt (index)가 정규식을 사용하지 않고 Java에서 Az 문자 또는 숫자인지 인식하는 가장 좋고 / 또는 가장 쉬운 방법은 무엇입니까? 감사.

답변:


242

Character.isDigit(string.charAt(index))( JavaDoc ) 숫자 이면 true를 반환합니다.
Character.isLetter(string.charAt(index))( JavaDoc ) 문자이면 true를 반환합니다.


13
참고 : 문자가 유니 코드 문자 / 숫자인지 알려줍니다. OP는 "Az 편지"를 요구했습니다.
Stephen C

4
제 경우에 ASCII ├ (255)가 통과하는 이유는 무엇입니까? az, AZ 및 0-9에만 해당한다고 생각 했습니까?
MR5

@ CᴏɴᴏʀO'Bʀɪᴇɴ 링크가 수정되었습니다. 알려 줘서 고마워.
Adam

13
Character.isLetterOrDigit(string.charAt(index))두 검증 모두에 사용하십시오 .
Aspirant9 2017

조심하세요, isLetterOrDigit은 a-Z0-9 이상으로 진실을 제공합니다 !!! 여기 docs.oracle.com/javase/7/docs/api/java/lang/…
fl0w

24

라틴 문자 또는 십진수 중 하나인지 확인하는 기능을 찾고 있습니다. 이후 char c = 255인쇄 가능한 버전은 이며 Character.isLetter(c). 이 기능은 대부분의 개발자가 찾고있는 것입니다.

private static boolean isLetterOrDigit(char c) {
    return (c >= 'a' && c <= 'z') ||
           (c >= 'A' && c <= 'Z') ||
           (c >= '0' && c <= '9');
}

1
방금 우리 코드를 살펴보고 isLetter와 isLetterOrDigit로 인해 얼마나 많은 버그가 있었는지 놀랐습니다 ... 감사합니다!
fl0w

1
어떻게 든 문자 세트를 얻거나 글꼴을 표시합니다. 유니 코드 코드 포인트 u00ff는 실제로 문자 ÿ입니다. (움라우트가있는 소문자 y.) ├를 나타내는 코드 포인트는 u251c입니다.
Stephen C

@StephenC 당신이 맞아요. nbsp
mr5

Kotlin에서는 훨씬 더 간단합니다if (c in 'a'..'z' || с in 'A'..'Z' || c in '0'..'9')
Vlad

23

답변에서 알 수 있듯이 (주의 깊게 살펴보면!) 질문이 모호합니다. "Az 문자"또는 숫자는 무엇을 의미합니까?

  • 문자가 유니 코드 문자인지 숫자 인지 알고 싶다면 Character.isLetterCharacter.isDigit메서드 를 사용하십시오 .

  • 문자가 ASCII 문자인지 숫자 인지 알고 싶다면 'a'~ 'z', 'A'~ 'Z', '0'문자 범위를 비교하여 테스트하는 것이 가장 좋습니다. '9'.

모든 ASCII 문자 / 숫자는 유니 코드 문자 / 숫자입니다 ... 그러나 ASCII가 아닌 유니 코드 문자 / 숫자 문자가 많이 있습니다. 예를 들어, 악센트 부호가있는 문자, 키릴 문자, 산스크리트어, ...


일반적인 해결책은 다음과 같습니다.

Character.UnicodeBlock block = Character.UnicodeBlock.of(someCodePoint);

그런 다음 블록이 관심있는 블록 중 하나인지 테스트합니다. 경우에 따라 여러 블록을 테스트해야합니다. 예를 들어, 키릴 문자에 대한 코드 블록이 (적어도) 4 개, 라틴어에 7 개가 있습니다. 이 Character.UnicodeBlock클래스는 잘 알려진 블록에 대한 정적 상수를 정의합니다. javadocs를 참조하십시오 .

모든 코드 포인트는 최대 한 블록에 있습니다.




5
// check if ch is a letter
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
    // ...

// check if ch is a digit
if (ch >= '0' && ch <= '9')
    // ...

// check if ch is a whitespace
if ((ch == ' ') || (ch =='\n') || (ch == '\t'))
    // ...

출처 : https://docs.oracle.com/javase/tutorial/i18n/text/charintro.html


1
위의 코드는 영어와 몇 가지 다른 언어에서만 작동하기 때문에 잘못되었습니다. 이전 예제를 국제화하려면 다음 문으로 바꾸십시오. char ch; // ... //이 코드는 괜찮습니다! if (Character.isLetter (ch)) // ... if (Character.isDigit (ch)) // ... if (Character.isSpaceChar (ch)) // ...
Yao Li

OP는 명확하게 물었다 if a string.charAt(index) is an A-z letter. 그래서 우리는 다른 언어에 대해 말하는 것이 아닙니다.
vadasambar

예를 들어, 독일어에서 ä는 az 범위에있는 것으로 간주 될 수 있습니다.
Robert

4

그 가치를 비교하십시오. 'a'와 'z', 'A'와 'Z', '0'과 '9'사이의 값이어야합니다.


1
이 수동 접근 방식이 기본 제공 Character.isLetter()방법 보다 낫 습니까?
IgorGanapolsky 2015

1
@IgorGanapolsky-정확히 무엇을 하려는지에 따라 다릅니다. 힌트 : 그들은 다른 일을합니다!
Stephen C

@StephenC 나는 Character.isLetter()초보적 이라고 생각했습니다 . 국제화에 대해 이야기하지 않는 한?
IgorGanapolsky

1
@IgorGanapolsky-javadocs를 읽어보세요. 그런 다음 각 문자 클래스에 실제로 포함 된 코드 포인트에 대한 유니 코드 사양을 확인하십시오. >> 물론 << 우리는 국제화에 대해 이야기하고 있습니다. Java의 문자는 모두 유니 코드 기반입니다.
Stephen C

이거 어떻게 해요?
존 ktejik

3

아래 코드를 사용하십시오

Character.isLetterOrDigit(string.charAt(index))


1
이전 답변에서 다루지 않은 귀하의 답변은 무엇을 추가합니까?
Robert

조심하세요, isLetterOrDigit은 a-Z0-9 이상으로 진실을 제공합니다 !!! 여기 docs.oracle.com/javase/7/docs/api/java/lang/…
fl0w

Robert, 두 개의 함수를 호출하는 대신 당연히 하나의 함수를 호출 할 수 있습니다.
셰이크

0
 import java.util.Scanner;
 public class v{
 public static void main(String args[]){
 Scanner in=new Scanner(System.in);
    String str;
    int l;
    int flag=0;
    System.out.println("Enter the String:");
    str=in.nextLine();
    str=str.toLowerCase();
    str=str.replaceAll("\\s","");
    char[] ch=str.toCharArray();
    l=str.length();
    for(int i=0;i<l;i++){
        if ((ch[i] >= 'a' && ch[i]<= 'z') || (ch[i] >= 'A' && ch[i] <= 'Z')){
        flag=0;
        }
        else

        flag++;
        break;
        } 
if(flag==0)
    System.out.println("Onlt char");


}
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.