Есть ли альтернатива StringUtils.isNumeric, что я имею в виду?
StringUtils.isNumeric возвращает true для "" и false для 7.8. Это, конечно, документированное поведение, но на самом деле это не самое удобное для меня. Есть ли что-то еще (в идеале в commons.lang), которое предоставляет isActuallyNumeric?
Ответы
Ответ 1
Попробуйте isNumber(String)
из org.apache.commons.lang.math.NumberUtils
.
Проверяет, является ли String действительным номером Java.
Допустимые числа включают шестнадцатеричное значение, помеченное квалификатором 0x, научное обозначение и номера, помеченные классификатором типа (например, 123l).
Null
и пустая строка вернет false
.
ОБНОВЛЕНИЕ -
isNumber(String)
устарела. Вместо этого используйте isCreatable(String)
.
Спасибо, eav, что указали на это.
Ответ 2
NumberUtils.isNumber устарело.
Вы должны использовать
NumberUtils.isCreatable
или
NumberUtils.isParsable
Все они поддерживают значение десятичной точки:
- NumberUtils.isCreatable поддерживает шестнадцатеричные, восьмеричные числа, научные обозначения и числа, помеченные квалификатором типа (например, 123L). Недействительные восьмеричные значения вернут
false
(например, 09). Если вы хотите получить его значение, вы должны использовать NumberUtils.createNumber.
- NumberUtils.isParsable поддерживает только
0~9
и десятичную точку (.
), любой другой символ (например, пробел или что-либо еще) вернет false
.
Кстати, у реализации StringUtils.isNumeric
есть некоторые различия между commons-lang и commons-lang3. В общем-то StringUtils.isNumeric("") - это true
. Но в commons-lang3 StringUtils.isNumeric("") равен false
. Вы можете получить больше информации по документам.
Ответ 3
Это не совсем в commons.lang
, но оно будет работать.
try {
double d = Double.parseDouble(string);
// string is a number
} catch (NumberFormatException e) {
// string is not a number
}
Ответ 4
В качестве альтернативы вы можете проверить, не соответствует ли какой-либо символ нулевому типу.
if(myStr.replaceAll("^$"," ").matches("[^\\d\\.]"))
, тогда вы знаете там вещи, которые не являются 0-9 и/или a.
Здесь эквивалент javascript (изменить строку для эксперимента)...
http://jsfiddle.net/LzZE6/