source

Java는 불량 데이터에 대한 예외를 발생시키지 않는 int.tryparse를 가지고 있습니까?

nicesource 2022. 10. 25. 17:40
반응형

Java는 불량 데이터에 대한 예외를 발생시키지 않는 int.tryparse를 가지고 있습니까?

중복 가능성:
Java: Integer.parseInt()를 캡슐화하는 좋은 방법
문자열을 플로트로 변환하고 자바에서 try/float 사용을 피하는 방법

C#에는 Int가 있습니다.TryParse:Int32.TryParse 메서드(String, Int32%)

이 방법의 장점은 불량 데이터에 대해 예외를 두지 않는다는 것입니다.

자바에서는Integer.parseInt("abc")예외가 발생하며, 이러한 상황이 발생할 수 있는 경우 퍼포먼스가 크게 저하됩니다.

퍼포먼스가 문제가 되는 경우, 이 문제를 해결할 수 있는 방법이 있을까요?

다른 방법은 regex에 대해 입력을 실행하는 것뿐입니다만, 어떤 것이 더 빠른지 테스트해야 합니다.

아니, 이렇게 직접 만들어야 돼

public int tryParseInt(String value, int defaultVal) {
    try {
        return Integer.parseInt(value);
    } catch (NumberFormatException e) {
        return defaultVal;
    }
}

...또는

public Integer parseIntOrNull(String value) {
    try {
        return Integer.parseInt(value);
    } catch (NumberFormatException e) {
        return null;
    }
}

Apache Commons에는 사용자가 원하는 작업을 수행할 수 있는 IntegerValidator 클래스가 있습니다.Java는 이를 위한 기본 제공 방법을 제공하지 않습니다.

groupid/artifactid에 대해서는 여기를 참조하십시오.

코드 샘플: (기능을 명확하게 나타내기 위해 약간 상세하게 설명)

private boolean valueIsAndInt(String value) {
    boolean returnValue = true;
    if (null == new org.apache.commons.validator.routines.IntegerValidator().validate(value)) {
        returnValue = false;
    }
    return returnValue;
}

편집 - 입력 데이터의 불량 가능성이 있는 부분과 관련된 성능 문제에 대한 의견을 방금 확인했습니다.파싱에 대한 시도/캐치 방법을 당장은 모르겠습니다.Int는 regex와 비교됩니다.매우 적은 지식으로 보아 정규식은 Java에서 try/catch에 비해 성능이 그다지 높지 않은 것 같습니다.

어쨌든, 난 그냥 이렇게 할 거야.

public Integer tryParse(Object obj) {
  Integer retVal;
  try {
    retVal = Integer.parseInt((String) obj);
  } catch (NumberFormatException nfe) {
    retVal = 0; // or null if that is your preference
  }
  return retVal;
}

언급URL : https://stackoverflow.com/questions/8391979/does-java-have-a-int-tryparse-that-doesnt-throw-an-exception-for-bad-data

반응형