Парсинг чисел безопасно и чувствительно к локали
В Java NumberFormat
1) не является потокобезопасным (который можно обойти с помощью ThreadLocal
); 2) неудобно использовать правильно для простейшего случая использования, когда я знаю, должна ли строка содержать int, long или double, и хочу такой API, как:
int parseInt(String str, Locale locale) throws ParseException;
int parseInt(String str, int defaultValue, Locale locale);
long parseLong(String str, Locale locale) throws ParseException;
long parseLong(String str, long defaultValue, Locale locale);
double parseDouble(String str, Locale locale) throws ParseException;
double parseDouble(String str, double defaultValue, Locale locale);
где исключение выдается, когда строка не полностью проанализирована. Очевидно, что такую обертку легко написать, но я не смог найти ее в Guava или Apache Commons Lang. Я только что пропустил это? Или есть другое более-менее стандартное решение для этого?
1 ответ
Решение
Один из вариантов, который я нашел, - это Apache Commons Validator (все еще не защищенный от потоков).