- Java: Проверьте, является ли строка числом
- Вступление
- Проверьте, является ли строка числовой с помощью ядра Java
- Проверьте, является ли строка числовой с помощью Apache Commons
- числа.Сопоставимо()
- Git Essentials
- NumberUtils.isCreatable()
- числа.isDigits()
- StringUtils.IsNumeric()
- StringUtils.isNumericSpace()
- Проверьте, является ли строка числовой с помощью регулярного выражения
- Вывод
- Читайте ещё по теме:
- Как проверить целое ли число java
- Проверка, является ли число целым числом в Java
- 8 ответов
- Проверка, является ли число целым числом в Java
- Ответы (11)
Java: Проверьте, является ли строка числом
В этом уроке мы рассмотрим примеры того, как проверить, представляет ли строка число в Java. Мы будем использовать основную Java и библиотеку Apache Commons, а также регулярные выражения.
Вступление
Строки-это удобный способ передачи информации и получения входных данных от пользователя.
В этой статье мы рассмотрим несколько способов проверить, является ли строка числовой в Java – то есть, представляет ли строка числовое значение.
Проверьте, является ли строка числовой с помощью ядра Java
Пользователи, как правило, довольно часто вводят неверные входные значения, поэтому разработчикам приходится как можно больше держать их за руку во время операций ввода-вывода.
Самый простой способ проверить, является ли строка числовой или нет,-это использовать один из следующих встроенных методов Java:
- Целое число.Синтаксический анализ()
- Целое число.valueOf()
- Double.Парседубль()
- Поплавок.парсеФлоат()
- Длинный.парсеЛонг()
Эти методы преобразуют заданную строку в ее числовой эквивалент. Если они не могут преобразовать его, создается исключение NumberFormatException , указывающее, что строка не была числовой.
Стоит отметить , что Integer.valueOf() возвращает новое целое число () , в то время как Integer.parseInt() возвращает примитив int . Имейте это в виду, если такая разница изменит ход вашей программы.
String string = «10»; try < intValue = Integer.parseInt(string); return true; >catch (NumberFormatException e)
Теперь мы можем абстрагировать эту функциональность в вспомогательный метод для удобства:
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
Выполнение этого кода приведет к:
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
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Этот код должен возвращать:
NumberUtils.isCreatable()
Этот метод также принимает строку и проверяет, является ли она допустимым номером Java . С помощью этого метода мы можем охватить еще больше чисел, потому что допустимое число Java включает в себя четные шестнадцатеричные и восьмеричные числа, научную нотацию, а также числа, отмеченные классификатором типа.
Теперь мы можем даже использовать что-то вроде:
String string = «0x10AB»; if (NumberUtils.isCreatable(string)) < System.out.println("String contains a creatable number!"); >else
String contains a creatable number!
числа.isDigits()
Число .Метод isDigits() проверяет, содержит ли строка только Цифры в Юникоде. Если Строка содержит начальный знак или десятичную точку, метод вернет false :
String string = «25»; if (NumberUtils.isDigits(string)) < System.out.println("String is numeric!"); >else
StringUtils.IsNumeric()
StringUtils.IsNumeric() является StringUtils эквивалентом NumberUtils.isDigits() .
Если Строка проходит числовой тест, она все равно может вызвать исключение NumberFormatException при анализе методами, о которых мы упоминали ранее, например, если она находится вне диапазона для int или long .
Используя этот метод, мы можем определить, можем ли мы проанализировать Строку в Целое число :
String string = «25»; if (StringUtils.isNumeric(string)) < System.out.println("String is numeric!"); >else
StringUtils.isNumericSpace()
Кроме того, если мы ожидаем найти больше чисел в строке, мы можем использовать isNumericSpace , еще один полезный StringUtils метод, о котором стоит упомянуть. Он проверяет, содержит ли строка | только цифры Юникода или пробелы .
Давайте проверим строку, содержащую числа и пробелы:
String string = «25 50 15»; if (StringUtils.isNumericSpace(string)) < System.out.println("String is numeric!"); >else
Проверьте, является ли строка числовой с помощью регулярного выражения
Несмотря на то, что большинство разработчиков будут довольны использованием уже реализованного метода, иногда у вас может быть очень специфическая проверка шаблонов:
public static boolean isNumeric(String string) < // Checks if the provided string // is a numeric by applying a regular // expression on it. String regex = "8+[\\.]?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 , чтобы проверить, является ли строка числовой или нет, в различных форматах.
Читайте ещё по теме:
Как проверить целое ли число java
Для проверки того, что число целое в Java можно использовать условие number % 1 == 0 Здесь % — оператор взятия остатка от деления, и если остаток от деления на 1 равен 0, то число является целым. Пример:
double number = 5.0; if (number % 1 == 0) System.out.println("Число является целым."); > else System.out.println("Число не является целым."); >
Проверка, является ли число целым числом в Java
Есть ли какой-либо метод или быстрый способ проверить, является ли число Integer (принадлежит Z-полю) в Java? Я думал, что, возможно, вычитал бы его из округленного числа, но я не нашел никакого метода, который поможет мне в этом. Где я должен проверить? Integer Api?
Вы анализируете число из String, или у вас уже есть число в некотором числе с плавающей запятой или double?
Насколько я знаю, Z — это не поле. Используете ли вы «поле» в каком-то другом смысле, кроме абстрактного математического смысла?
Понял!! Спасибо! .. Итак, вы сохранили его как число с плавающей точкой или что-то еще и хотите проверить, является ли оно «целым числом»?
8 ответов
edit: Предполагается, что x уже находится в некоторой другой числовой форме. Если вы имеете дело со строками, загляните в Integer.parseInt .
Обычно у меня есть функция isInteger (), которая пытается перехватить через Integer.parseInt, возвращая false в случае возникновения исключения.
это хороший ответ, и по этой причине я проголосовал за него — но все же убедитесь, что вы понимаете ограничения представлений с плавающей запятой!
double a = 1.00 if(floor(a) == a) < // a is an integer >else < //a is not an integer. >
В этом примере можно использовать ceil и иметь тот же эффект.
Если вы говорите о значениях с плавающей запятой, вы должны быть очень осторожны из-за характера формата.
лучший способ, которым я это знаю, — это решить какое-то значение epsilon, скажем, 0,000001f, а затем сделать что-то вроде этого:
По существу, вы проверяете, имеет ли z и целочисленный случай z то же значение в пределах некоторого допуска. Это необходимо, потому что плавающие по своей сути являются неточными.
ПРИМЕЧАНИЕ. ОДНАКО: это, вероятно, сломается, если ваши поплавки имеют величину больше, чем Integer.MAX_VALUE (2147483647), и вы должны знать, что по необходимости невозможно проверить интегральность на поплавках выше этого значения.
+1: Вы получаете круглую ошибку на float для целых больше , чем 2 ^ 24 (около 16 миллионов) Если вы используете double вы получаете круглые ошибки для целых gretaer , чем 2 ^ 53 (8 миллионов триллионов)
Проверка, является ли число целым числом в Java
Есть ли какой-либо метод или быстрый способ проверить, является ли число целым числом (принадлежит полю Z) в Java? Я думал, может быть, вычесть его из округленного числа, но я не нашел никакого метода, который мне в этом поможет. Где я должен проверить? Целое API?
Вы анализируете число из String или у вас уже есть число в каком-то float или double? — person Serhiy   schedule 31.03.2011
У меня есть любое число, оно может быть и плавающим, и двойным. — person Unknown user   schedule 31.03.2011
@ntt: N = натуральные числа, Z = целое, Q = рациональное, R = вещественное, C = комплексное — person MicSim   schedule 31.03.2011
Насколько я знаю, Z не является полем. Используете ли вы поле в каком-то другом смысле, кроме абстрактного математического? — person Alexander Questioning Bresee   schedule 31.03.2011
Кстати: можно ли здесь показать Unicode-представления этих символов? Как U + 2124 для Z? — person MicSim   schedule 31.03.2011
Понятно!! Спасибо. Итак, вы сохранили его как число с плавающей запятой или что-то в этом роде и хотите проверить, является ли оно «целым числом»? — person notthetup   schedule 31.03.2011
Ответы (11)
редактировать: это предполагает, что x уже находится в какой-то другой числовой форме. Если вы имеете дело со строками, загляните в Integer.parseInt .
Обычно у меня есть функция isInteger(), которая пытается перехватить Integer.parseInt, возвращая false в случае возникновения исключения. — person Serhiy; 31.03.2011
это хороший ответ, и я проголосовал за него по этой причине, но все же убедитесь, что вы понимаете ограничения представлений с плавающей запятой! — person Alexander Questioning Bresee; 31.03.2011
изначально это решение не работает для меня, но оно использует его с осторожностью: if (x.intValue() == x.doubleValue()) <> — person taha; 19.05.2021
double a = 1.00 if(floor(a) == a) < // a is an integer >else < //a is not an integer. >
если вы говорите о значениях с плавающей запятой, вы должны быть очень осторожны из-за характера формата. лучший известный мне способ сделать это — выбрать значение эпсилон, скажем, 0,000001f, а затем сделать что-то вроде этого:
по сути, вы проверяете, имеют ли z и целочисленный случай z одинаковую величину в пределах некоторого допуска. Это необходимо, потому что плавающие по своей сути неточны. ПРИМЕЧАНИЕ, ОДНАКО: это, вероятно, сломается, если ваши поплавки имеют величину больше Integer.MAX_VALUE (2147483647), и вы должны знать, что по необходимости невозможно проверить целостность поплавков выше этого значения.
+1: вы получаете круглую ошибку для float для целых чисел больше 2 ^ 24 (около 16 миллионов). Если вы используете double , вы получаете круглые ошибки для целых чисел больше 2 ^ 53 (8 миллионов триллионов) — person Peter Lawrey; 31.03.2011
Под Z я предполагаю, что вы имеете в виду целые числа, то есть 3,-5,77, а не 3,14, 4,02 и т. д. Регулярное выражение может помочь:
Pattern isInteger = Pattern.compile("\\d+");
под Z он имел в виду целые числа, en.wikipedia.org/wiki/Integer ‹— Z обычный символ, используемый для представления набора. — person Alexander Questioning Bresee; 31.03.2011