How to check the user input is an integer or not with Scanner?

此生再无相见时 提交于 2021-01-21 11:53:43

问题


I want the country codes are integer that input by the user. I want an error message to be show when user inputs a code which is not an integer. How can I do this? The program is to ask user to enter country name and country code. In which user will input the country code. But if user inputs a character I want a message to be shown saying Invalid Input.

System.out.println("Enter country name:");                     
countryName = in.nextLine();
System.out.println("Enter country code:");            
int codeNumber = in.nextInt(); 
in.nextLine();

回答1:


If the input is not an int value, then Scanner's nextInt() (look here for API) method throws InputMismatchException, which you can catch and then ask the user to re-enter the 'country code' again as shown below:

  Scanner in = new Scanner(System.in);
  boolean isNumeric = false;//This will be set to true when numeric val entered
  while(!isNumeric)
     try {
        System.out.println("Enter country code:");
        int codeNumber = in.nextInt(); 
        in.nextLine();
        isNumeric = true;//numeric value entered, so break the while loop
        System.out.println("codeNumber ::"+codeNumber);
  } catch(InputMismatchException ime) {
     //Display Error message
     System.out.println("Invalid character found,
            Please enter numeric values only !!");
     in.nextLine();//Advance the scanner
  }



回答2:


One simple way of doing it, is reading a line for the numbers as you did with the name, and then checking witha Regex (Regular Expression) to see if contains only numbers, with the matches method of string, codeNumber.matches("\\d+"), it returns a boolean if is false, then it's not a number and you can print your error message.

System.out.println("Enter country name:");                     
countryName = in.nextLine();
System.out.println("Enter country code:");            
String codeNumber = in.nextLine(); 
if (codeNumber.matches("\\d+")){
    // is a number
} else {
    System.out.println("Please, inform only numbers");
}



回答3:


You can do something like this, by first getting the input as a string, then try to convert the string to an integer, then outputs an error message if it can't:

String code= in.nextLine();
try
        {
          // the String to int conversion happens here
          int codeNumber = Integer.parseInt(code);
        }
catch (NumberFormatException nfe)
        {
          System.out.println("Invalid Input. NumberFormatException: " + nfe.getMessage());
        }



回答4:


You could instead check hasNextInt then call nextInt

int codeNumber;

System.out.println("Enter country code:");

if(in.hasNextInt())
{
    codeNumber = in.nextInt();
}
else
{
    System.out.println("Invalid Code !!");
}



回答5:


If you are creating your own custom exception class, then use regex to check if the input string is an integer or not.

private final String regex = "[0-9]";

Then, check if the input follows the regex pattern.

if (codeNumber.matches(regex)) {
    // do stuff.
} else {
    throw new InputMismatchException(codeNumber);
}

You can use build in InputMismatchException if you are not creating your custom exception handler.



来源:https://stackoverflow.com/questions/48610810/how-to-check-the-user-input-is-an-integer-or-not-with-scanner

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!