Однако, если вы часто вызываете эту функцию и ожидаете, что многие проверки завершатся неудачей из-за отсутствия числа, то производительность этого механизма будет невысокой, поскольку вы полагаетесь на исключения, генерируемые при каждом сбое, что является довольно дорогостоящей операцией.
Альтернативным подходом может быть использование регулярного выражения для проверки достоверности того, что это число:
publicstaticbooleanisNumeric(String str) { return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal. }
Однако будьте осторожны с приведенным выше механизмом регулярных выражений, поскольку он не сработает, если вы используете неарабские цифры (т. Е. Цифры, отличные от 0 до 9). Это связано с тем, что часть регулярного выражения "\ d" будет соответствовать только [0-9] и фактически не имеет международной числовой поддержки. (Спасибо OregonGhost за указание на это!)
Или даже другой альтернативой является использование встроенного в Java объекта java.text.NumberFormat, чтобы увидеть, находится ли после синтаксического анализа строки позиция анализатора в конце строки. Если это так, мы можем предположить, что вся строка является числовой:
Вы также можете использовать StringUtils.isNumericSpace который возвращает true для пустых строк и игнорирует внутренние пробелы в строке. Другой способ - использовать NumberUtils.isParsable который в основном проверяет, является ли число анализируемым в соответствии с Java. (Связанные javadocs содержат подробные примеры для каждого метода.)