Je prends l'entrée d'utilisateur de System.in
en utilisant un Java.util.Scanner
. Je dois valider les entrées pour des choses comme:
Quelle est la meilleure façon de faire cela?
Voici une façon minimaliste de le faire.
System.out.print("Please enter an integer: ");
while(!scan.hasNextInt()) scan.next();
int demoInt = scan.nextInt();
Pour vérifier les chaînes de caractères des lettres, vous pouvez utiliser des expressions régulières, par exemple:
someString.matches("[A-F]");
Pour vérifier les nombres et arrêter le blocage du programme, j'ai une classe assez simple que vous pouvez trouver ci-dessous, dans laquelle vous pouvez définir la plage de valeurs que vous souhaitez . Ici
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;
}
Une idée:
try {
int i = Integer.parseInt(myString);
if (i < 0) {
// Error, negative input
}
} catch (NumberFormatException e) {
// Error, not a number.
}
Il existe également, dans commons-lang library la classe CharUtils qui fournit les méthodes isAsciiNumeric()
pour vérifier qu'un caractère est un nombre, et isAsciiAlpha()
pour vérifier que le caractère est une lettre ...
ce que j’ai essayé, c’est que j’ai d’abord pris l’entrée entière et vérifié que sa valeur soit négative ou non, si elle est négative, prenez à nouveau la
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);
Ici, vous devez commencer par saisir le caractère et vérifier si l’utilisateur a donné ou non un caractère, sinon, saisir à nouveau le caractère.
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);
Si vous analysez des données de chaîne depuis la console ou similaire, le meilleur moyen consiste à utiliser des expressions régulières. En savoir plus sur cela ici: http://Java.Sun.com/developer/technicalArticles/releases/1.4regex/
Sinon, pour analyser un int d'une chaîne, essayez Integer.parseInt (string) . Si la chaîne n'est pas un nombre, vous obtiendrez une exception. Sinon, vous pouvez ensuite vérifier votre valeur pour vous assurer qu'elle n'est pas négative.
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!");
}
Pour obtenir une chaîne de caractères uniquement, il serait probablement préférable de boucler chaque caractère en vérifiant les chiffres, en utilisant par exemple 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;
}
}
Bonne chance!