- Rukovodstvo
- статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
- Java: проверьте, является ли строка числом
- Введение Строки — это удобный способ передачи информации и получения ввода от пользователя. В этой статье мы рассмотрим несколько способов проверки того, является ли String числовым в Java, то есть представляет ли String числовое значение. Проверьте, является ли строка числовой с помощью Core Java. Пользователи часто ошибаются при вводе значений, поэтому разработчики должны как можно дольше держать их за руку во время операций ввода-вывода. Самый простой способ проверить, является ли строка числовой или нет, принадлежит нам.
- Вступление
- Проверьте, является ли строка числовой с помощью Core Java
- Проверьте, является ли строка числовой с помощью Apache Commons
- NumberUtils.isParsable ()
- NumberUtils.isCreatable ()
- NumberUtils.isDigits ()
- StringUtils.isNumeric ()
- StringUtils.isNumericSpace ()
- Проверьте, является ли строка числовой с помощью Regex
- Заключение
- как проверить строку на то, что это Double?
- Check for a valid double in Java
- Java: Using Try/Catch Exception to check if user input is Double
Rukovodstvo
статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
Java: проверьте, является ли строка числом
Введение Строки — это удобный способ передачи информации и получения ввода от пользователя. В этой статье мы рассмотрим несколько способов проверки того, является ли String числовым в Java, то есть представляет ли String числовое значение. Проверьте, является ли строка числовой с помощью Core Java. Пользователи часто ошибаются при вводе значений, поэтому разработчики должны как можно дольше держать их за руку во время операций ввода-вывода. Самый простой способ проверить, является ли строка числовой или нет, принадлежит нам.
Вступление
Строки — это удобный способ передачи информации и получения ввода от пользователя.
В этой статье мы рассмотрим несколько способов проверить, является ли String числовым в Java, то есть представляет ли String числовое значение.
Проверьте, является ли строка числовой с помощью Core Java
Пользователи часто ошибочно набирают входные значения, поэтому разработчики должны как можно дольше держать их за руку во время операций ввода-вывода.
Самый простой способ проверить, является ли String числовым или нет, — использовать один из следующих встроенных методов Java:
- Integer.parseInt()
- Integer.valueOf()
- Double.parseDouble()
- Float.parseFloat()
- Long.parseLong()
Эти методы преобразуют заданную String в ее числовой эквивалент. Если они не могут его преобразовать, NumberFormatException , указывающее, что строка не является числовой.
Стоит отметить, что Integer.valueOf() возвращает new Integer() , а 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!
С другой стороны, если мы ожидаем, что String будет содержать действительно большое число, мы можем вызвать конструктор BigInteger(String) , который переводит представление String BigInteger .
Проверьте, является ли строка числовой с помощью Apache Commons
Apache Commons — одна из наиболее часто используемых сторонних библиотек для расширения базовой Java Framework. Это дает нам более точный контроль над основными классами Java, в данном случае над строками.
Мы рассмотрим два класса из библиотеки Apache Commons:
Оба из них очень похожи на свои аналоги в классическом Java-классе, но с акцентом на нулевые безопасные операции (с числами и строками соответственно), что означает, что мы можем даже определять значения по умолчанию для отсутствующих ( нулевых ) значений.
Давайте теперь посмотрим, как мы можем проверить числовые значения с помощью этих методов.
NumberUtils.isParsable ()
Этот метод принимает String и проверяет, является ли это число, которое можно анализировать, или нет, мы можем использовать этот метод вместо перехвата исключения при вызове одного из методов, которые мы упоминали ранее.
Это очень хорошо, потому что по возможности следует избегать решений, связанных с частой обработкой исключений — именно в этом нам помогает этот метод.
Обратите внимание, что шестнадцатеричные числа и научные обозначения не считаются анализируемыми.
Теперь нам даже не нужен вспомогательный вспомогательный метод, поскольку isParseable() возвращает само boolean
String string = "10"; if (NumberUtils.isParsable(string)) < System.out.println("String is numeric!"); >else
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!
NumberUtils.isDigits ()
Метод NumberUtils.isDigits() проверяет, содержит ли строка только цифры Unicode. Если String содержит начальный знак или десятичную точку, метод вернет false :
String string = "25"; if (NumberUtils.isDigits(string)) < System.out.println("String is numeric!"); >else
StringUtils.isNumeric ()
StringUtils.isNumeric() является StringUtils эквивалент NumberUtils.isDigits() .
Если String проходит числовой тест, он все равно может генерировать NumberFormatException при синтаксическом анализе упомянутыми ранее методами, например, если он выходит за пределы диапазона для int или long .
Используя этот метод, мы можем определить, можем ли мы преобразовать String Integer :
String string = "25"; if (StringUtils.isNumeric(string)) < System.out.println("String is numeric!"); >else
StringUtils.isNumericSpace ()
Кроме того, если мы ожидаем найти больше чисел в isNumericSpace , еще один полезный StringUtils стоит упомянуть. Он проверяет, String только цифры или пробелы Unicode.
Давайте проверим строку, содержащую числа и пробелы:
String string = "25 50 15"; if (StringUtils.isNumericSpace(string)) < System.out.println("String is numeric!"); >else
Проверьте, является ли строка числовой с помощью Regex
Несмотря на то, что большинство разработчиков будут довольны использованием уже реализованного метода, иногда у вас может быть очень специфическая проверка шаблона:
public static boolean isNumeric(String string) < // Checks if the provided string // is a numeric by applying a regular // expression on it. String regex = "5+[\\.]?6*"; 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.
Мы начали с Core Java и NumberFormatException , после чего использовали библиотеку Apache Commons. Оттуда мы использовали StringUtils и NumberUtils чтобы проверить, является ли String числовым или нет, с различными форматами.
Licensed under CC BY-NC-SA 4.0
как проверить строку на то, что это Double?
при запуске код работает, но в случае с Double выдает сразу два варианта, что это Double и это String.
- Считывать с консоли данные, пока не будет введено слово «exit«.
- Для каждого значения, кроме «exit«, вызвать метод print() . Если значение:
- содержит точку ‘.‘, вызвать метод print() для Double ;
- больше нуля, но меньше 128 , вызвать метод print() для short ;
- меньше либо равно нулю или больше либо равно 128 , вызвать метод print() для Integer ;
- иначе — вызвать метод print() для String .
Если введенная строка содержит точку(«.»), и ее можно корректно преобразовать в число типа Double — должен быть вызван метод print(Double value).
Если введенная строка может быть корректно преобразована в число типа short и полученное число больше 0, но меньше 128 — должен быть вызван метод print(short value).
Если введенная строка может быть корректно преобразована в число типа Integer и полученное число меньше или равно 0 или больше или равно 128 — должен быть вызван метод print(Integer value).
JavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Check for a valid double in Java
If you want to check that it is a number that does not fit into in Integer, you may round the double. E.g. exploit the fact that round(1.2) != 1.2 , but round(1) == 1 .
private boolean isDouble(String str) < try < // check if it can be parsed as any double double x = Double.parseDouble(str); // check if the double can be converted without loss to an int if (x == (int) x) // if yes, this is an int, thus return false return false; // otherwise, this cannot be converted to an int (e.g. "1.2") return true; // short version: return x != (int) x; >catch(NumberFormatException e) < return false; >>
return E; returns the value of the expression E. In this case, E is a boolean condition x != (int) x . The round can be dropped, actually. Updated my answer.
The problem is due to the fact that 1.00 is 1 and it’s a double. This means you can’t simply parse a double and pretend that the code detect itself if it’s an int or not. For this you should add a check, I think the easiest is the following:
private boolean isDouble(String str) < try < double myDouble = Double.parseDouble(str); myDouble -= (int)myDouble; //this way you are making the (for example) 10.3 = 0.3 return myDouble != (double)0.00; //this way you check if the result is not zero. if it's zero it was an integer, elseway it was a double >catch(NumberFormatException e) < return false; >>
I did it without editor, so tell me if something is wrong.
Java: Using Try/Catch Exception to check if user input is Double
I am writing a simple program that allows a user to enter two separate doubles for a foot and inch measurement. The program is intended to take these values and convert them to centimeters and output them. Additionally I am to include two exceptions: one to make sure the numeric values are positive and not negative (this one I have completed) and another to make sure the input entered is a double value and not a string value (this one I am having a hard time with). So if a user enters an input. for example ‘Bill’ instead of a number, it is to display an error message and ask the user to re-enter the input values again. It seems like perhaps I would be best off gathering the user input as a string (rather than doubles as I currently am), which I convert to doubles and return them as doubles to their corresponding methods: getFootValue() and getInchValue() — but I am not too sure. How should I go about implementing this by way of a custom exception? I cannot simply utilize the InputMismatchException, I need to make my own titled NonDigitNumberException(). Here is what I have so far.
import java.util.Scanner; public class Converter < private double feet; private double inches; public Converter(double feet, double inches) < this.feet = feet; this.inches = inches; >public double getFootValue() < return feet; >public double getInchValue() < return inches; >public double convertToCentimeters() < double inchTotal; inchTotal = (getFootValue() * 12) + getInchValue(); return inchTotal * 2.54; >public String toString() < return ("Your result is: " + convertToCentimeters()); >> import java.util.Scanner; import java.util.InputMismatchException; public class TestConverter < public static void main(String[] args) < /* Create new scanner for user input */ Scanner keyboard = new Scanner(System.in); do < try < /* Get the feet value */ System.out.print("Enter the foot value: "); double feet = keyboard.nextDouble(); if (feet < 0) throw new NegativeNumberException(); /* Get the inches value */ System.out.print("Enter the inch value: "); double inches = keyboard.nextDouble(); if (inches < 0) throw new NegativeNumberException(); else < Converter conversion = new Converter(feet, inches); /* Print the converted result */ System.out.println(conversion); break; >> catch(InputMismatchException ignore)<> catch(NegativeNumberException error) < System.out.println("A negative-numeric value was entered, please enter only positive-numeric values. "); >>while(true); /* Close the keyboard */ keyboard.close(); > > class NegativeNumberException extends Exception < public NegativeNumberException() < super(); >public NegativeNumberException(String errorMessage) < super(errorMessage); >>
Why are you throwing an exception at all? You could just print the error message and continue instead.
Have you considered using Scanner.hasNextDouble() to test whether the next token can be scanned as a double?
Or else simply handle the InputMismatchException that occurs when the input cannot be scanned as a double in some way more useful than just ignoring it. Catching an exception and ignoring it is almost never the right thing to do.
I must use a custom exception to test whether it is a double or string value being entered — unfortunately. This is per my instructors requests.
Thanks for the tip on the handle, I am rather new to using exceptions so I wasn’t too sure how to go about ignoring the error that closes the program when a user enters a string instead of a double and using the custom exception instead.