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

Самый элегантный isNumeric() решение для java

Я переношу небольшой фрагмент кода PHP в java прямо сейчас, и я полагался на функцию is_numeric($x), чтобы определить, является ли число $x числом или нет. Кажется, что в java нет эквивалентной функции, и я не удовлетворен текущими решениями, которые я нашел до сих пор.

Я склоняюсь к решению регулярного выражения, найденному здесь: http://rosettacode.org/wiki/Determine_if_a_string_is_numeric

Какой метод я должен использовать и почему?

4b9b3361

Ответ 1

Обратите внимание, что функция PHP isNumeric() будет корректно определять, что шестнадцатеричная и научная нотация - это числа, к которым не привязаны ссылки регулярного выражения, на которые вы ссылаетесь.

Один из вариантов, особенно если вы уже используете библиотеки Apache Commons, заключается в использовании NumberUtils.isNumber() из Commons-Lang. Он будет обрабатывать те же случаи, что и PHP-функция.

Ответ 2

Вы изучали использование StringUtils library? Там есть функция isNumeric(), которая может быть тем, что вы ищете. (Обратите внимание, что значение "" будет оценено как true)

Ответ 3

Как правило, плохая идея иметь число в строке. Если вы хотите использовать этот номер, проанализируйте его и используйте его как числовое. Вам не нужно "проверять", если оно числовое, либо вы хотите использовать его как числовое, либо нет.

Если вам нужно его преобразовать, вы можете использовать каждый синтаксический анализатор от Integer.parseInt(String) до BigDecimal(String)

Если вам просто нужно проверить, что содержимое можно увидеть как числовое, тогда вы можете уйти с регулярными выражениями.

И не используйте parseInt, если ваша строка может содержать float.

Ответ 4

При желании вы также можете использовать регулярное выражение.

   if (theString.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+")))
     return true;

    return false;

Ответ 5

Вы попробовали Integer.parseInt()? (Я не уверен в имени метода, но класс Integer имеет метод, который создает объект Integer из строк). Или, если вам нужно обрабатывать нецелые числа, аналогичные методы доступны и для объектов Double. Если они не выполняются, генерируется исключение.

Если вам нужно разобрать очень большие числа (больше, чем int/double) и не нуждаться в точном значении, тогда может быть достаточно простой метод, основанный на регулярном выражении.

Ответ 6

В строго типизированном языке общий методNumeric (String num) не очень полезен. 13214384348934918434441 является числовым, но не подходит для большинства типов. Многие из тех, где он подходит, не возвращают одинаковое значение.

Как отметил Колин, перенос номеров в Строках с приложением не рекомендуется. Функция isNumberic должна применяться только для входных данных по методам интерфейса. Они должны иметь более точное определение, чем isNumeric. Другие предоставили различные решения. Регулярные выражения могут использоваться для одновременного тестирования нескольких условий, включая длину строки.

Ответ 7

Просто используйте if ((x instanceof Number)

//, если проверка на число синтаксического анализа также

|| (x instanceof String & x.matches( "((- |\+)? [0-9] + (\. [0-9] +)?) +" ))

) {  ... }
//--- Все числовые типы, включая BigDecimal extend Number