Подтвердить что ты не робот

Есть ли альтернатива StringUtils.isNumeric, что я имею в виду?

StringUtils.isNumeric возвращает true для "" и false для 7.8. Это, конечно, документированное поведение, но на самом деле это не самое удобное для меня. Есть ли что-то еще (в идеале в commons.lang), которое предоставляет isActuallyNumeric?

4b9b3361

Ответ 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/