web-dev-qa-db-ja.com

Java.util.Scannerを使用した入力の検証

System.inを使用してJava.util.Scannerからユーザー入力を取得しています。次のようなものの入力を検証する必要があります。

  • 負でない数でなければなりません
  • アルファベットでなければなりません
  • ...など

これを行う最良の方法は何ですか?

38

最小限の方法でこれを実行できます。

System.out.print("Please enter an integer: ");
while(!scan.hasNextInt()) scan.next();
int demoInt = scan.nextInt();
3
Dylan Sharhon

文字列の文字を確認するには、たとえば次の正規表現を使用できます。

someString.matches("[A-F]");

数値をチェックし、プログラムのクラッシュを止めるために、必要な値の範囲を定義できる非常に簡単なクラスを以下に示します。 ここ

    public int readInt(String Prompt, int min, int max)
    {
    Scanner scan = new Scanner(System.in);

    int number = 0;

    //Run once and loop until the input is within the specified range.
    do 
    {
        //Print users message.
        System.out.printf("\n%s > ", Prompt);

        //Prevent string input crashing the program.
        while (!scan.hasNextInt()) 
        {
            System.out.printf("Input doesn't match specifications. Try again.");
            System.out.printf("\n%s > ", Prompt);
            scan.next(); 
        }

        //Set the number.
        number = scan.nextInt();

        //If the number is outside range print an error message.
        if (number < min || number > max)
            System.out.printf("Input doesn't match specifications. Try again.");

    } while (number < min || number > max);

    return number;
}
3
Duane

一つのアイデア:

try {
    int i = Integer.parseInt(myString);
    if (i < 0) {
        // Error, negative input
    }
} catch (NumberFormatException e) {
    // Error, not a number.
}

また、 commons-lang ライブラリには、文字が数字であることを確認するメソッドisAsciiNumeric()isAsciiAlpha()を提供する CharUtils クラスがあります。文字が文字であることを確認するには...

1
Romain Linsolas

私が試したのは、最初に整数入力を取得し、その入力が負であるかどうかを確認し、負の場合は再び入力を取得することです

Scanner s=new Scanner(System.in);

    int a=s.nextInt();
    while(a<0)
    {
    System.out.println("please provide non negative integer input ");
    a=s.nextInt();
    }
    System.out.println("the non negative integer input is "+a);

ここでは、最初に文字入力を行い、ユーザーが文字を入力したかどうかを再度確認する必要があります。

    char ch = s.findInLine(".").charAt(0);
    while(!Charcter.isLetter(ch))
    {
    System.out.println("please provide a character input ");
    ch=s.findInLine(".").charAt(0);
    }
    System.out.println("the character  input is "+ch);
0

コンソールなどから文字列データを解析する場合、最良の方法は正規表現を使用することです。詳細はこちらをご覧ください: http://Java.Sun.com/developer/technicalArticles/releases/1.4regex/

それ以外の場合、文字列からintを解析するには、 Integer.parseInt(string) を試してください。文字列が数字ではない場合、例外が発生します。それ以外の場合は、その値をチェックして、負でないことを確認できます。

String input;
int number;
try
{
    number = Integer.parseInt(input);
    if(number > 0)
    {
        System.out.println("You positive number is " + number);
    }
} catch (NumberFormatException ex)
{
     System.out.println("That is not a positive number!");
}

文字のみの文字列を取得するには、たとえば Character.isLetter(char) を使用して、数字をチェックする各文字をループ処理することをお勧めします。

String input
for(int i = 0; i<input.length(); i++)
{
   if(!Character.isLetter(input.charAt(i)))
   {
      System.out.println("This string does not contain only letters!");
      break;
   }
}

幸運を!

0
mahju