Вопрос-ответ

How to check if a String is numeric in Java

Как проверить, является ли строка числовой в Java

Как бы вы проверили, является ли строка числом, прежде чем разбирать ее?

Переведено автоматически
Ответ 1

Обычно это делается с помощью простой определяемой пользователем функции (т.Е. Создайте свою собственную функцию "IsNumeric").

Что-то вроде:

public static boolean isNumeric(String str) { 
try {
Double.parseDouble(str);
return true;
} catch(NumberFormatException e){
return false;
}
}

Однако, если вы часто вызываете эту функцию и ожидаете, что многие проверки завершатся неудачей из-за отсутствия числа, то производительность этого механизма будет невысокой, поскольку вы полагаетесь на исключения, генерируемые при каждом сбое, что является довольно дорогостоящей операцией.

Альтернативным подходом может быть использование регулярного выражения для проверки достоверности того, что это число:

public static boolean isNumeric(String str) {
return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal.
}

Однако будьте осторожны с приведенным выше механизмом регулярных выражений, поскольку он не сработает, если вы используете неарабские цифры (т. Е. Цифры, отличные от 0 до 9). Это связано с тем, что часть регулярного выражения "\ d" будет соответствовать только [0-9] и фактически не имеет международной числовой поддержки. (Спасибо OregonGhost за указание на это!)

Или даже другой альтернативой является использование встроенного в Java объекта java.text.NumberFormat, чтобы увидеть, находится ли после синтаксического анализа строки позиция анализатора в конце строки. Если это так, мы можем предположить, что вся строка является числовой:

public static boolean isNumeric(String str) {
ParsePosition pos = new ParsePosition(0);
NumberFormat.getInstance().parse(str, pos);
return str.length() == pos.getIndex();
}
Ответ 2

С помощью Apache Commons Lang 3.5 и выше: NumberUtils.isCreatable или StringUtils.isNumeric.

С помощью Apache Commons Lang 3.4 и ниже: NumberUtils.isNumber или StringUtils.isNumeric.

Вы также можете использовать StringUtils.isNumericSpace который возвращает true для пустых строк и игнорирует внутренние пробелы в строке. Другой способ - использовать NumberUtils.isParsable который в основном проверяет, является ли число анализируемым в соответствии с Java. (Связанные javadocs содержат подробные примеры для каждого метода.)

Ответ 3

Лямбда-выражения Java 8.

String someString = "123123";
boolean isNumeric = someString.chars().allMatch( Character::isDigit );
Ответ 4

если вы используете Android, то вам следует использовать:

android.text.TextUtils.isDigitsOnly(CharSequence str)

документацию можно найти здесь

будьте проще. в основном каждый может "перепрограммировать" (одно и то же).

java string