본문 바로가기
자바

문자열이 Java의 정수인지 확인합니다

by º기록 2021. 4. 10.
반응형

문자열 배열의 특정 항목이 정수인지 여부를 확인하려고합니다.

나는 string 폼에서 infix 표현식을 split ( "") 'ing split ( "") 'in throught retracture herals를 두 개의 배열로 분할하려고합니다.하나는 정수, 운영자 용 하나, 괄호 및 기타 기타 항목을 폐기하는 동안.이것을 성취하는 가장 좋은 방법은 무엇입니까?

나는 integer.isinteger (String arg) 메소드 또는 그런 행운을 찾을 수 있다고 생각했지만 행운은 아닙니다.

 

해결 방법

 

가장 순진한 방법은 문자열을 반복하고 모든 요소가 주어진 기수에 대한 유효한 숫자인지 확인하는 것입니다.이는 적어도 한 번 각 요소를보아야하기 때문에 효율적으로 효율적입니다.나는 우리가 기수를 기반으로 마이크로 최적화 할 수 있지만 모든 의도와 목적을 위해 이것이 당신이 얻을 수있는 것만 큼 좋은 것입니다.

public static boolean isInteger(String s) {
    return isInteger(s,10);
}

public static boolean isInteger(String s, int radix) {
    if(s.isEmpty()) return false;
    for(int i = 0; i < s.length(); i++) {
        if(i == 0 && s.charAt(i) == '-') {
            if(s.length() == 1) return false;
            else continue;
        }
        if(Character.digit(s.charAt(i),radix) < 0) return false;
    }
    return true;
}

또는이를 Java 라이브러리에 의존 할 수 있습니다.그것은 예외 기반이 아니며, 당신이 생각할 수있는 모든 오류 상태를 잡을 것입니다.그것은 조금 더 비싸게 될 것입니다 (당신이하고 싶지 않은 비판적으로 꽉 루는 루프에서 스캐너 객체를 만들어야합니다. 그러나 일반적으로 더 훨씬 더 비싸지 않아야합니다.운영은 꽤 신뢰할 수 있어야합니다.

public static boolean isInteger(String s, int radix) {
    Scanner sc = new Scanner(s.trim());
    if(!sc.hasNextInt(radix)) return false;
    // we know it starts with a valid int, now make sure
    // there's nothing left!
    sc.nextInt(radix);
    return !sc.hasNext();
}

모범 사례가 당신에게 중요하지 않거나 코드 리뷰를하는 사람을 트롤하고 싶다면,이를 위해 이것을 시도하십시오.

public static boolean isInteger(String s) {
    try { 
        Integer.parseInt(s); 
    } catch(NumberFormatException e) { 
        return false; 
    } catch(NullPointerException e) {
        return false;
    }
    // only got here if we didn't return false
    return true;
}

 

참조 페이지 https://stackoverflow.com/questions/5439529

 

 

반응형

댓글