Я знаю, что варианты этого вопроса задавались часто раньше (см. здесь и здесь), но это не дубликат точный.
Я хотел бы проверить, является ли число String
числом, и поэтому я хотел бы сохранить его как double
. Есть несколько способов сделать это, но все они кажутся неуместными для моих целей.
Одним из решений было бы использовать Double.parseDouble(s)
или аналогично new BigDecimal(s)
. Однако эти решения не работают, если есть запятые (так что "1,234" приведет к исключению). Я мог бы, конечно, удалить все запятые, прежде чем использовать эти методы, но это, похоже, создает множество проблем в других локалях.
Я посмотрел на Apache Commons NumberUtils.isNumber(s)
, но он страдает от одной и той же проблемы с запятой.
Я считал NumberFormat
или DecimalFormat
, но они казались слишком мягкими. Например, "1A" отформатируется на "1" вместо указания того, что это не число. Кроме того, что-то вроде "127.0.0.1" будет считаться числом 127 вместо того, чтобы указывать, что это не число.
Я чувствую, что мои требования не настолько экзотичны, что я первый, кто это сделал, но ни одно из решений не делает именно то, что мне нужно. Я полагаю, что даже я не знаю точно, что мне нужно (иначе я мог бы написать собственный парсер), но я знаю, что вышеупомянутые решения не работают по указанным причинам. Существует ли какое-либо решение, или мне нужно выяснить, что мне нужно, и написать для него свой собственный код?