Java에는 잘못된 잘못된 데이터에 예외가 발생하지 않는 것이 있습니까? [복제]
가능성 :
Java : Integer.parseInt ()를 캡슐화하는 좋은 방법
을 float로 변환하고 java에서 try / catch 사용을 피하는 방법은 무엇입니까?
C #에는 Int.TryParse : Int32.TryParse 메서드 (String, Int32 %)가 있습니다.
이 방법의 가장 좋은 점은 잘못된 데이터에 대해 좋은 예외를 발생 시킨다는 것입니다.
자바에서는 Integer.parseInt("abc")
예외가 발생하며, 보관 수있는 경우 많은 성능이 있습니다.
성능이 문제가되는 경우에 어떻게 든이 문제를 해결하는 방법이 있습니까?
내가 생각할 수있는 유일한 다른 방법은 정규식에 입력을 실행하는 것이 더 빠른 것이 무엇인지 테스트해야합니다.
아니요. 다음과 같이 직접 지시합니다.
boolean tryParseInt(String value) {
try {
Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}
... 다음과 같이 사용할 수 있습니다.
if (tryParseInt(input)) {
Integer.parseInt(input); // We now know that it's safe to parse
}
편집 (@Erk의 주석에 따라)
다음과 같은 것이 더 나을 것입니다.
public int tryParse(String value, int defaultVal) {
try {
return Integer.parseInt(value);
} catch (NumberFormatException e) {
return defaultVal;
}
}
단일 보편적 인 매개 변수는 오버로드하면 더 좋을 것입니다. 상관은 선택 사항입니다.
public int tryParse(String value) {
return tryParse(value, 0)
}
Apache Commons에는 원하는 작업을 수행하는 것처럼 보이는 IntegerValidator 클래스가 있습니다. 자바는이를 수행하기위한 메소드를 제공하지 않습니다.
편집 -잠재적으로 잘못된 입력 데이터와 관련된 문제에 대한 의견을 확인했습니다. parseInt의 try / catch가 정규식과 어떻게 비교하여 직접 알지 못합니다. 나는 거의 어려운 지식을 바탕으로 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;
}
'IT' 카테고리의 다른 글
PHP에서 MySQL API를 혼합 할 수 있습니까? (0) | 2020.08.18 |
---|---|
R MarkDown과 R NoteBook의 차이점 (0) | 2020.08.18 |
최대 동시 Socket.IO 연결 (0) | 2020.08.18 |
단일 페이지 애플리케이션을 구축하기위한 JavaScript 프레임 워크 (0) | 2020.08.18 |
JSON 값에 여러 줄 다수가 있습니까? (0) | 2020.08.18 |