Почему DecimalFormat допускает использование символов в качестве суффикса? - PullRequest
15 голосов
/ 01 декабря 2010

Я использую DecimalFormat для анализа / проверки ввода пользователя. К сожалению, он разрешает символы в качестве суффикса при разборе.

Пример кода:

try {
  final NumberFormat numberFormat = new DecimalFormat();
  System.out.println(numberFormat.parse("12abc"));
  System.out.println(numberFormat.parse("abc12"));
} catch (final ParseException e) {
  System.out.println("parse exception");
}

Результат:

12
parse exception

Я бы на самом деле ожидал исключения синтаксического анализа для них обоих. Как я могу сказать DecimalFormat не разрешать ввод, как "12abc"?

Ответы [ 2 ]

16 голосов
/ 01 декабря 2010

Из документации NumberFormat.parse:

Разбирает текст в начале заданной строки для получения числа. Метод может не использовать весь текст данной строки.

Вот пример, который должен дать вам представление о том, как убедиться, что рассматривается вся строка.

import java.text.*;

public class Test {
    public static void main(String[] args) {
        System.out.println(parseCompleteString("12"));
        System.out.println(parseCompleteString("12abc"));
        System.out.println(parseCompleteString("abc12"));
    }

    public static Number parseCompleteString(String input) {
        ParsePosition pp = new ParsePosition(0);
        NumberFormat numberFormat = new DecimalFormat();
        Number result = numberFormat.parse(input, pp);
        return pp.getIndex() == input.length() ? result : null;
    }
}

Вывод:

12
null
null
2 голосов
/ 01 декабря 2010

Используйте перегрузку parse(String, ParsePosition) метода и проверьте .getIndex () ParsePosition после синтаксического анализа, чтобы увидеть, соответствует ли он длине ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...