문자열의 첫 문자가 숫자인지 어떻게 알 수 있습니까?


108

Java에서 문자열의 첫 번째 문자가 숫자인지 알아내는 방법이 있습니까?

한 가지 방법은

string.startsWith("1")

9 시까 지 위의 작업을 수행하지만 매우 비효율적 인 것 같습니다.


10
정규식 방식에 대해 언급하려고했지만 그렇게한다면 시도해보고 싶은 유혹을받을 까 두려웠습니다.
Michael Myers

답변:


259
Character.isDigit(string.charAt(0))

참고 이 수 있는 유니 코드 숫자 만이 아니라 0-9. 다음을 선호 할 수 있습니다.

char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');

또는 더 느린 정규식 솔루션 :

s.substring(0, 1).matches("\\d")
// or the equivalent
s.substring(0, 1).matches("[0-9]")

그러나 이러한 방법 중 하나를 사용하여 먼저 문자열이 비어 있지 않은지 확인해야합니다. 이 경우, charAt(0)substring(0, 1)을 던질 것이다 StringIndexOutOfBoundsException. startsWith이 문제가 없습니다.

전체 조건을 한 줄로 만들고 길이 확인을 피하려면 정규식을 다음과 같이 변경할 수 있습니다.

s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")

조건이 프로그램에서 타이트한 루프에 나타나지 않으면 정규식 사용에 대한 작은 성능 저하가 눈에 띄지 않을 것입니다.


Re : "먼저 문자열이 비어 있지 않은지 확인해야합니다."-true가 아니라 그 이상-표시되는 모든 메소드가 예외를 던지는 것처럼 null이 아닌지 확인해야합니다. 당신이 직접 확인할 수 있습니다 (예를 들어 ((null!=s) && Character.isDigit(s.charAt(0)) )) 또는 사용 트릭 같은Character.isDigit((s?s:"X").charAt(0))
epeleg

8

정규 표현식은 매우 강력하지만 비용이 많이 드는 도구입니다. 첫 번째 문자가 숫자인지 확인하는 데 사용할 수 있지만 그렇게 우아하지는 않습니다. :)이 방법을 선호합니다.

public boolean isLeadingDigit(final String value){
    final char c = value.charAt(0);
    return (c >= '0' && c <= '9');
}

12
1) functionJava가 아닙니다. 2) 이것은 중국어, 인도 등이 아닌 아라비아 숫자 만 허용합니다. 그것은 당신이 선호하는 것일 수도 있지만 질문에 명시되어 있지 않습니다. 3) 나는 이미 4 년 전에 내 대답 에서이 정확한 해결책을 다뤘습니다.
Michael Myers

0
regular expression starts with number->'^[0-9]' 
Pattern pattern = Pattern.compile('^[0-9]');
 Matcher matcher = pattern.matcher(String);

if(matcher.find()){

System.out.println("true");
}

2
{1,1}접미사는 필요하지 않습니다. 즉, "이전 패턴은 1 번에서 1 번 사이에 나타나야합니다". 이것은 패턴이 그 자체로하는 것과 정확히 동일하다는 것을 의미합니다.
Andrzej Doyle

이 솔루션은 String.matches 때문에 작동하지 않고 패턴 API의 시도가 완료 문자열뿐 아니라 첫 번째 문자와 일치하도록
Amrish 펜디 교수

0

나는 방금이 질문을 보았고 정규식을 사용하지 않는 솔루션으로 기여할 생각을했습니다.

제 경우에는 도우미 메서드를 사용합니다.

public boolean notNumber(String input){
    boolean notNumber = false;
    try {
        // must not start with a number
        @SuppressWarnings("unused")
        double checker = Double.valueOf(input.substring(0,1));
    }
    catch (Exception e) {
        notNumber = true;           
    }
    return notNumber;
}

아마도 과잉이지만 가능한 한 정규식을 피하려고 노력합니다.

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