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