У меня есть следующий код для парсинга Строковой переменной, названной ул.
NumberFormat formatter = NumberFormat.getInstance();
Number number = formatter.parse(str);
Я хочу поймать Исключение, выданное, когда ул. не является числом только для проверки его. Проблема, которую я имею, состоит в том, что это делает не, всегда бросает ожидаемый ParseException. Когда String str запускается с числа, но затем является символами, это, кажется, получает первые символы Строки и анализирует их как число.
Например:
Я не могу использовать Double.parseDouble (ул.), потому что ул. может иметь запятые и точки как 1 000,98, и этот формат не понят под этим методом.
Почему это происходит? Я могу проверить его каким-либо другим способом?Спасибо
Поведение не странное, оно такое, как задумано
Разбирает текст с начала заданной строки для получения числа. Метод может не использовать весь текст заданной строки.
Вы можете использовать метод разбора с учетом позиции следующим образом:
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 , там ясно сказано:
Анализирует текст с начала заданная строка для получения числа. Метод не может использовать весь текст данной строки.
Если вы хотите увидеть, как далеко анализатор проанализировал, вы можете использовать другой метод с учетом позиции . Таким образом вы можете проверить, есть ли у вас конечные символы. Вы также можете проверить всю строку на наличие буквенно-цифровых символов, используя, например, общие языки isAlpha .