Самое элегантное решение isNumeric () для Java

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

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

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

16
задан Doug 17 August 2010 в 21:35
поделиться

6 ответов

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

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

16
ответ дан 30 November 2019 в 21:35
поделиться

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

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

1
ответ дан 30 November 2019 в 21:35
поделиться

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

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

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

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

2
ответ дан 30 November 2019 в 21:35
поделиться

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

4
ответ дан 30 November 2019 в 21:35
поделиться

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

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

0
ответ дан 30 November 2019 в 21:35
поделиться

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

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

    return false;
2
ответ дан 30 November 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: