/
Вопросы и ответы
/
Java
/

Как проверить является ли строка числом java

Как проверить является ли строка числом java

5 лет назад

Человек-Молекула

Ответы

0

Также можно воспользоваться методом StringUtils.isNumeric() :

1
2
3
4
5
6
7
import org.apache.commons.lang3.StringUtils;
public class App {
    public static void main(String[] args) {
        System.out.println(StringUtils.isNumeric("123")); // => true
        System.out.println(StringUtils.isNumeric("12a3")); // => false
    }
}

4 года назад

Сергей Якимович

0

Другой пример реализации метода с помощью регулярных выражений :

1
2
3
public static boolean isNumber(String str) {
    return str.matches("-?\\d+");
}

4 года назад

Сергей Якимович

0

Приведенный ниже метод isNumber() проверит является ли строка числом :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class App {
    public static void main(String[] args) {
        System.out.println(isNumber("123")); // => true
        System.out.println(isNumber("12q3")); // => false
    }

    public static boolean isNumber(String str) {
        try {
            Integer.parseInt(str);
        } catch (Exception e) {
            return false;
        }
        return true;
    }
}

4 года назад

Сергей Якимович

0

Проще всего попробовать преобразовать строку и поймать ошибку:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static boolean isInteger(String str) {
    try {
        Integer.parseInt(str);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}

isInteger("123");   // true
isInteger("-45");   // true
isInteger("12.5");  // false
isInteger("abc");   // false
isInteger("");      // false

parseInt сам проверяет знак, цифры и диапазон int.

Что считается числом

Перед проверкой определите, какие строки вы считаете числом. Разные способы отвечают по-разному:

СтрокаparseIntparseDoublematches("-?\\d+")StringUtils.isNumeric
"123"дададада
"-5"дададанет
"3.14"нетданетнет
" 7 "нетданетнет
"1e5"нетданетнет
"99999999999"нетдадада
""нетнетнетнет

Integer.parseInt не пропускает пробелы. Перед проверкой ввода пользователя вызывайте str.trim().

"99999999999" не помещается в int. Для таких чисел используйте Long.parseLong или new BigInteger(str).

Дробные числа

1
2
3
4
5
6
7
8
public static boolean isNumber(String str) {
    try {
        Double.parseDouble(str);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}

parseDouble принимает и экзотические строки: "NaN", "Infinity", "1e5", "10d". Если они не нужны, используйте регулярное выражение.

Регулярное выражение

1
2
3
str.matches("-?\\d+");            // целое число
str.matches("-?\\d+(\\.\\d+)?");  // целое или дробное с точкой
str.matches("-?\\d+([.,]\\d+)?"); // дробная часть через точку или запятую

Регулярка проверяет формат, но не диапазон. Строка из 30 цифр пройдёт проверку, а parseInt на ней упадёт.

Только цифры

1
2
3
4
5
6
7
8
9
10
11
public static boolean isDigits(String str) {
    if (str.isEmpty()) {
        return false;
    }
    for (char c : str.toCharArray()) {
        if (!Character.isDigit(c)) {
            return false;
        }
    }
    return true;
}

Без проверки на пустую строку метод вернёт true для "".

Character.isDigit пропускает и цифры других алфавитов, например арабские ٣. Для строгой проверки на 0–9 используйте условие c >= '0' && c <= '9'.

Apache Commons Lang

1
2
3
4
5
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;

StringUtils.isNumeric("123");     // true, только цифры без знака и точки
NumberUtils.isCreatable("-3.14"); // true, любое число в формате Java

Библиотеку нужно подключить отдельно через Maven или Gradle.

Строки, исключения и обработку ошибок разбирают в бесплатном курсе «Основы Java».

11 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845