Рубрики
Без рубрики

Java: Проверьте, является ли строка числом

В этом уроке мы рассмотрим примеры того, как проверить, представляет ли строка число в Java. Мы будем использовать основную Java и библиотеку Apache Commons, а также регулярные выражения.

Автор оригинала: Anđela Niketić.

Вступление

Строки-это удобный способ передачи информации и получения входных данных от пользователя.

В этой статье мы рассмотрим несколько способов проверить, является ли строка числовой в Java – то есть, представляет ли строка числовое значение.

Проверьте, является ли строка числовой с помощью ядра Java

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

Самый простой способ проверить, является ли строка числовой или нет,-это использовать один из следующих встроенных методов Java:

  1. Целое число.Синтаксический анализ()
  2. Целое число.valueOf()
  3. Double.Парседубль()
  4. Поплавок.парсеФлоат()
  5. Длинный.парсеЛонг()

Эти методы преобразуют заданную строку в ее числовой эквивалент. Если они не могут преобразовать его, создается исключение NumberFormatException , указывающее, что строка не была числовой.

Стоит отметить , что Integer.valueOf() возвращает новое целое число () , в то время как Integer.parseInt() возвращает примитив int . Имейте это в виду, если такая разница изменит ход вашей программы.

Давайте попробуем это:

String string = "10";

try {
    intValue = Integer.parseInt(string);
    return true;
} catch (NumberFormatException e) {
    System.out.println("Input String cannot be parsed to Integer.");
}

Это приводит к:

true

Теперь мы можем абстрагировать эту функциональность в вспомогательный метод для удобства:

public static boolean isNumeric(String string) {
    int intValue;
		
    System.out.println(String.format("Parsing string: \"%s\"", string));
		
    if(string == null || string.equals("")) {
        System.out.println("String cannot be parsed, it is null or empty.");
        return false;
    }
    
    try {
        intValue = Integer.parseInt(string);
        return true;
    } catch (NumberFormatException e) {
        System.out.println("Input String cannot be parsed to Integer.");
    }
    return false;
}

Теперь мы можем просто позвонить:

String string = "10";

if(isNumeric(string)) { 
    System.out.println("String is numeric!");
    // Do something
} else {
    System.out.println("String is not numeric.");
}

Выполнение этого кода приведет к:

Parsing string: "10"
String is numeric!

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

Проверьте, является ли строка числовой с помощью Apache Commons

Apache Commons является одной из наиболее часто используемых сторонних библиотек для расширения базовой платформы Java. Это дает нам более точный контроль над основными классами Java, в данном случае строками.

Мы рассмотрим два класса из библиотеки Apache Commons:

  1. Количество элементов
  2. СтрингУтилы

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

Давайте теперь посмотрим, как мы можем проверить числовые значения с помощью этих методов.

числа.Сопоставимо()

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

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

Обратите внимание, что шестнадцатеричные числа и научные обозначения не считаются поддающимися анализу.

Теперь нам даже не нужен вспомогательный метод для удобства, так как поддается анализу() возвращает логическое значение само по себе:

String string = "10";

if (NumberUtils.isParsable(string)) {
    System.out.println("String is numeric!");
} else {
    System.out.println("String is not numeric.");
}

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Этот код должен возвращать:

String is numeric!

NumberUtils.isCreatable()

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

Теперь мы можем даже использовать что-то вроде:

String string = "0x10AB";

if (NumberUtils.isCreatable(string)) {
    System.out.println("String contains a creatable number!");
} else {
    System.out.println("String doesn't contain creatable number.");
}

Результатом будет:

String contains a creatable number!

числа.isDigits()

Число .Метод isDigits() проверяет, содержит ли строка только Цифры в Юникоде. Если Строка содержит начальный знак или десятичную точку, метод вернет false :

String string = "25";

if (NumberUtils.isDigits(string)) {
    System.out.println("String is numeric!");
} else {
    System.out.println("String isn't numeric.");
}

StringUtils.IsNumeric()

StringUtils.IsNumeric() является StringUtils эквивалентом NumberUtils.isDigits() .

Если Строка проходит числовой тест, она все равно может вызвать исключение NumberFormatException при анализе методами, о которых мы упоминали ранее, например, если она находится вне диапазона для int или long .

Используя этот метод, мы можем определить, можем ли мы проанализировать Строку в Целое число :

String string = "25";

if (StringUtils.isNumeric(string)) {
    System.out.println("String is numeric!");
} else {
    System.out.println("String isn't numeric.");
}

StringUtils.isNumericSpace()

Кроме того, если мы ожидаем найти больше чисел в строке, мы можем использовать isNumericSpace , еще один полезный StringUtils метод, о котором стоит упомянуть. Он проверяет, содержит ли строка | только цифры Юникода или пробелы .

Давайте проверим строку, содержащую числа и пробелы:

String string = "25 50 15";

if (StringUtils.isNumericSpace(string)) {
    System.out.println("String is numeric!");
} else {
    System.out.println("String isn't numeric.");
}

Это приводит к:

String is numeric!

Проверьте, является ли строка числовой с помощью регулярного выражения

Несмотря на то, что большинство разработчиков будут довольны использованием уже реализованного метода, иногда у вас может быть очень специфическая проверка шаблонов:

public static boolean isNumeric(String string) {
    // Checks if the provided string
    // is a numeric by applying a regular
    // expression on it.
    String regex = "[0-9]+[\\.]?[0-9]*";
    return Pattern.matches(regex, string);
}

И тогда мы можем вызвать этот метод:

System.out.println("123: " + isStringNumeric2("123"));
System.out.println("I'm totally a numeric, trust me: " + isStringNumeric2("I'm totally a numeric, trust me"));

Выполнение этого дает нам следующий результат:

123: true
I'm totally a numeric, trust me: false

Вывод

В этой статье мы рассмотрели несколько способов проверить, является ли строка числовой или нет (представляет собой число) в Java.

Мы начали использовать ядро Java и поймали исключение NumberFormatException , после чего мы использовали библиотеку Apache Commons. Оттуда мы использовали классы StringUtils и NumberUtils , чтобы проверить, является ли строка числовой или нет, в различных форматах.