source

Java에서 문자열이 정수인지 확인

goodcode 2022. 8. 10. 22:18
반응형

Java에서 문자열이 정수인지 확인

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

는 ~라고 합니다..split(" ")에 인픽스 표현을 쓰고 있다.String형식에서 생성된 배열을 두 개의 배열로 분할합니다.하나는 정수, 다른 하나는 연산자, 그리고 괄호 및 기타 항목은 폐기합니다.를를위 위장 ?장 ?? ?? ???

가 찾을 수 것 Integer.isInteger(String arg)방법이나 뭐 그런 건 있지만 그런 운은 없어요

가장 간단한 방법은 String을 반복하여 모든 요소가 지정된 기수에 대해 유효한 자리수인지 확인하는 것입니다.각 요소를 한 번 이상 살펴봐야 하므로 이 방법은 최대한 효율적입니다.기수를 기준으로 미세 최적화할 수 있을 것 같습니다만, 어디까지나 이것은 기대 이상의 것입니다.

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 라이브러리를 사용하여 이 기능을 사용할 수도 있습니다.이는 예외 기반은 아니며 생각할 수 있는 모든 오류 상태를 탐지합니다.비용이 조금 더 들 것입니다(Scanner 객체를 만들어야 합니다.이것은 매우 엄격한 루프에서는 하고 싶지 않습니다).그러나 일반적으로 너무 많은 비용이 들지는 않기 때문에 일상 업무에서는 상당히 안정적입니다.

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;
}

정규 표현을 사용하는 것이 좋습니다.

str.matches("-?\\d+");


-?     --> negative sign, could have none or one
\\d+   --> one or more digits

은 좋지 않다NumberFormatException사용할 수 있다면 여기if-statement★★★★★★ 。


선행 0을 사용하지 않으려면 다음과 같이 정규식을 사용할 수 있습니다.

str.matches("-?(0|[1-9]\\d*)");

또는 Apache Commons의 친한 친구 StringUtils.isNumeric(String Str)에게 도움을 받을 수 있습니다.

또는 간단하게

mystring.matches("\\d+")

그러나 int보다 큰 숫자에 대해서는 true로 반환됩니다.

Integer.parseInt(String) 메서드를 사용합니다.

try{
  int num = Integer.parseInt(str);
  // is an integer!
} catch (NumberFormatException e) {
  // not an integer!
}

하고 캐치하기 NumberFormatException는 regex 라고을 사용할 수 있습니다

if (Pattern.compile("-?[0-9]+").matches(str)) {
    // its an integer
}

특히 regex를 사전 컴파일하여 재사용하는 경우 이 속도가 더 빠를 수 있습니다.

단, 이 접근법의 문제는Integer.parseInt(str)또한 실패한다.str법적 범위를 벗어난 숫자를 나타냅니다.int가치.범위 내의 정수만 일치하는 정규식을 만들 수 있지만Integer.MIN_INT로.Integer.MAX_INT(그리고 나는 그것을 시도하지 않을 거야...)

반면에...검증 목적으로 "정수가 아니다"와 "정수가 너무 크다"를 별도로 취급하는 것이 허용될 수 있다.

사용할 수 있습니다.Integer.parseInt(str)잡아서NumberFormatException문자열이 유효한 정수가 아닌 경우 다음 방식으로(모든 답변에서 지적됨)

static boolean isInt(String s)
{
 try
  { int i = Integer.parseInt(s); return true; }

 catch(NumberFormatException er)
  { return false; }
}

단, 평가된 정수가 오버플로우하면 같은 예외가 느려지는 것에 주의해 주십시오.당신의 목적은 그것이 유효한 정수인지 아닌지를 알아내는 것이었습니다.따라서 타당성을 확인하는 방법을 직접 만드는 것이 더 안전합니다.

static boolean isInt(String s)  // assuming integer is in decimal number system
{
 for(int a=0;a<s.length();a++)
 {
    if(a==0 && s.charAt(a) == '-') continue;
    if( !Character.isDigit(s.charAt(a)) ) return false;
 }
 return true;
}

사용할 수 있습니다.Integer.parseInt()또는Integer.valueOf()문자열에서 정수를 가져와 해석 가능한 int가 아닌 경우 예외를 포착합니다.꼭 잡으시고 싶으시다면NumberFormatException던질 수 있어요.

valueOf()는 원시 int가 아닌 Integer 개체를 반환한다는 점에 유의하십시오.

public boolean isInt(String str){
    return (str.lastIndexOf("-") == 0 && !str.equals("-0")) ? str.substring(1).matches(
            "\\d+") : str.matches("\\d+");
}

언급URL : https://stackoverflow.com/questions/5439529/determine-if-a-string-is-an-integer-in-java

반응형