如何检查 java 扫描仪中的空输入
How to check for empty inputs in java scanner
经过一番挖掘,我未能找到令人满意的方法来在 do-while 循环中实现条件,以便扫描器忽略空输入。
尝试的代码:
String name = "";
boolean flag_name= false;
do{
System.out.print("Name: ");
if(scanner.hasNextInt()){
int number = scanner.nextInt();
scanner.nextLine();
System.out.printf("\"%s\" is not a valid name...\n", number);
}else{
name = scanner.nextLine();
if(!name.equals("")){
if(name.length() <= 2){
System.out.println("The name is too short (min: 3)...");
}else if(name.length >= 20){
System.out.println("The name is too long (max: 20)...");
}else{
flag_name = true;
}
}
}
}while(!flag_name);
预期输出:
Name:
Name:
Name:
Name:
Name:
Name: willy
Age:
实际输出:
Name:
willy
Name: Name: Name: Name: Name: Age:
我会说你的逻辑有问题。不要像这样循环,考虑将你的方法分解成多个函数。
我写个算法
static boolean isValidName(String input) {
/*
* enter code here
*/
return true for valid
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = "";
do {
System.out.print("Name: ");
name = scanner.nextLine();
if (isValidName(name)) {
break;
}
} while (true);
System.out.println(name);
}
hasNextInt 不是检查用户是否输入数字的最佳方法。您必须更彻底地考虑验证。
最后想出了以下解决方案:
// Regex validation of number
public static boolean isNumeric(String str){
return str.matches("-?\d+(\.\d+)?");
}
// Validation of the string input with custom error messages.
public static boolean isValidName(String name){
if(Utils.isNumeric(name)){
System.out.printf("\"%s\" Is not a valid name.\n\n", name);
}else{
if(name.length() < 3){
System.out.printf("\"%s\" Too short... (min 3)\n\n", name);
}else if(name.length() > 20){
System.out.printf("\"%s\" Too long... (max 20)\n\n", name);
}else{
return true;
}
}
return false;
}
// Ask for input code block
String name;
do{
System.out.print("Name: ");
name = scanner.nextLine();
if(!name.isEmpty()){
if(Utils.isValidName(name)){
break;
}
}
}while(true);
- 将我的输入保存在变量中并从那里进行验证。
- 实现了一个正则表达式方法,不仅可以检查整数,还可以检查任何类型的数字。
- 在另一种方法上将实际输入的验证与自定义错误消息分开。
- .isEmpty() 丢弃空输入的方法(原题)。
经过一番挖掘,我未能找到令人满意的方法来在 do-while 循环中实现条件,以便扫描器忽略空输入。
尝试的代码:
String name = "";
boolean flag_name= false;
do{
System.out.print("Name: ");
if(scanner.hasNextInt()){
int number = scanner.nextInt();
scanner.nextLine();
System.out.printf("\"%s\" is not a valid name...\n", number);
}else{
name = scanner.nextLine();
if(!name.equals("")){
if(name.length() <= 2){
System.out.println("The name is too short (min: 3)...");
}else if(name.length >= 20){
System.out.println("The name is too long (max: 20)...");
}else{
flag_name = true;
}
}
}
}while(!flag_name);
预期输出:
Name:
Name:
Name:
Name:
Name:
Name: willy
Age:
实际输出:
Name:
willy
Name: Name: Name: Name: Name: Age:
我会说你的逻辑有问题。不要像这样循环,考虑将你的方法分解成多个函数。
我写个算法
static boolean isValidName(String input) {
/*
* enter code here
*/
return true for valid
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = "";
do {
System.out.print("Name: ");
name = scanner.nextLine();
if (isValidName(name)) {
break;
}
} while (true);
System.out.println(name);
}
hasNextInt 不是检查用户是否输入数字的最佳方法。您必须更彻底地考虑验证。
最后想出了以下解决方案:
// Regex validation of number
public static boolean isNumeric(String str){
return str.matches("-?\d+(\.\d+)?");
}
// Validation of the string input with custom error messages.
public static boolean isValidName(String name){
if(Utils.isNumeric(name)){
System.out.printf("\"%s\" Is not a valid name.\n\n", name);
}else{
if(name.length() < 3){
System.out.printf("\"%s\" Too short... (min 3)\n\n", name);
}else if(name.length() > 20){
System.out.printf("\"%s\" Too long... (max 20)\n\n", name);
}else{
return true;
}
}
return false;
}
// Ask for input code block
String name;
do{
System.out.print("Name: ");
name = scanner.nextLine();
if(!name.isEmpty()){
if(Utils.isValidName(name)){
break;
}
}
}while(true);
- 将我的输入保存在变量中并从那里进行验证。
- 实现了一个正则表达式方法,不仅可以检查整数,还可以检查任何类型的数字。
- 在另一种方法上将实际输入的验证与自定义错误消息分开。
- .isEmpty() 丢弃空输入的方法(原题)。