Автор оригинала: Anđela Niketić.
Вступление
Строки-это удобный способ передачи информации и получения входных данных от пользователя.
В этой статье мы рассмотрим несколько способов проверить, является ли строка числовой в Java – то есть, представляет ли строка числовое значение.
Проверьте, является ли строка числовой с помощью ядра Java
Пользователи, как правило, довольно часто вводят неверные входные значения, поэтому разработчикам приходится как можно больше держать их за руку во время операций ввода-вывода.
Самый простой способ проверить, является ли строка числовой или нет,-это использовать один из следующих встроенных методов Java:
Целое число.Синтаксический анализ()
Целое число.valueOf()
Double.Парседубль()
Поплавок.парсеФлоат()
Длинный.парсеЛонг()
Эти методы преобразуют заданную строку
в ее числовой эквивалент. Если они не могут преобразовать его, создается исключение 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:
Количество элементов
СтрингУтилы
Оба из которых очень похожи на их аналоги ванильного класса 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
, чтобы проверить, является ли строка числовой или нет, в различных форматах.