문제

str이라는 문자열 변수를 구문 분석하는 다음 코드가 있습니다.

NumberFormat formatter = NumberFormat.getInstance();
Number number = formatter.parse(str);

STR이 단지 그것을 검증하기 위해 숫자가 아닐 때 발생하는 예외를 잡고 싶습니다. 내가 가진 문제는 그것이 항상 예상되는 parseexception을 던지는 것은 아니라는 것입니다. 문자열이 숫자로 시작되면 문자 인 경우 문자열의 첫 번째 문자를 얻고 숫자로 구문 분석하는 것 같습니다.

예를 들어:

  • str = "a10"인 경우 parseexception을 던집니다.
  • str = "10a"인 경우 예외가 발생하지 않으며 숫자 = 10

STR은 1,000.98과 같은 쉼표와 지점을 가질 수 있고이 형식은이 방법으로 이해되지 않기 때문에 Double.parsedouble (STR)을 사용할 수 없습니다.

왜 이런 일이 일어나고 있습니까? 다른 방법으로 검증 할 수 있습니까? 감사

도움이 되었습니까?

해결책

행동은 이상하지 않으며 설계된대로

주어진 문자열의 시작 부분에서 텍스트를 구문 분석하여 숫자를 생성합니다. 이 메소드는 주어진 문자열의 전체 텍스트를 사용하지 않을 수 있습니다.

다음과 같은 위치 인식 구문 분석 방법을 사용할 수 있습니다.

public static double parse(String str) throws ParseException {
  NumberFormat formatter = NumberFormat.getInstance();
  ParsePosition position = new ParsePosition(0);
  Number number = formatter.parse(str, position);
  if (position.getIndex() != str.length()) {
    throw new ParseException("failed to parse entire string: " + str, position.getIndex());
  }
  return number.doubleValue();
} 

다른 팁

당신이 보면 API, 그것은 분명히 말한다 :

주어진 문자열의 시작 부분에서 텍스트를 구문 분석하여 숫자를 생성합니다. 이 메소드는 주어진 문자열의 전체 텍스트를 사용하지 않을 수 있습니다.

파서가 얼마나 많이 구문 분석했는지보고 싶다면 다른 위치 인식 방법. 이렇게하면 후행 숯이 있는지 확인할 수 있습니다. 예를 들어 공통 langs를 사용하여 영숫자 숯의 전체 문자열을 확인할 수도 있습니다. Isalpha.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top