提问人:Abdullah El Emam 提问时间:5/15/2023 最后编辑:Arun SudhakaranAbdullah El Emam 更新时间:5/15/2023 访问量:89
如何检查扫描仪输入是否包含 0-9 之间的任何数字?
How to check if scanner input contains any digit(s) from 0-9?
问:
从本质上讲,我要求用户输入他们的名字,我试图检查他们是否在他们的名字中输入了一个数字,以便程序再次打印出“请输入你的名字”。处理这个问题非常困难(或者是例外?对不起,我是新手)。这是我到目前为止的代码:
import java.util.Scanner;
import java.util.InputMismatchException;
import java.util.Arrays;
import javax.swing.*;
import javax.swing.table.*;
public class scannerTrial {
public static void main() {
//Initializing variables
//Setting up scanner
Scanner inputs=new Scanner(System.in);
String nameF="null";
String nameL="null";
String gender="null";
int age=0;
//Setting up digit checker
boolean checkF=true;
checkF=nameF.contains("0");
checkF=nameF.contains("1");
checkF=nameF.contains("2");
checkF=nameF.contains("3");
checkF=nameF.contains("4");
checkF=nameF.contains("5");
checkF=nameF.contains("6");
checkF=nameF.contains("7");
checkF=nameF.contains("8");
checkF=nameF.contains("9");
//Initiating user input
while(!checkF) {
System.out.println("Please type in your name.");
nameF=inputs.nextLine();
if(true) {
checkF=true;
break;
}
}
}
}
我试图做的是制作一个布尔值,用于确定输入是否包含任何数字,如果它确实找到了一个数字,它将返回 true。然后,我会进入一个循环,如果布尔值为 true,那么它会循环回来,直到用户理解并返回 false,然后它突破循环。但是,出于某种原因,当我在编译程序后运行程序时,即使在键入诸如“n0”之类的内容后,程序也会退出循环。
答:
1赞
Bohemian
5/15/2023
#1
您当前的代码仅检查 ,因为所有其他检查都被覆盖了。"9"
要修复你的代码(不做太多改动),你必须做一个逻辑,所以在英语中,它会读作 nameF 不包含“0”,也不包含“1”和 ...,如下所示:AND
boolean checkF=true;
checkF &= nameF.contains("0");
checkF &= nameF.contains("1");
// etc
但是非字母非数字(如逗号)呢?你没有阻止它。
如果您使用正则表达式,有一种更简单的方法:
String nameF = "";
while (!nameF.matches("[a-zA-Z]+")) {
System.out.println("Please type in your first name: ");
nameF = inputs.nextLine();
}
这将一直循环,直到由一个或多个字母字符组成。由于初始化为空白,因此它始终至少执行一次循环。nameF
nameF
评论
0赞
Elliott Frisch
5/15/2023
或while (!nameF.matches("\\D+")) {
0赞
Bohemian
5/15/2023
@ElliottFrisch会接受.社会还没有到那里。"\\D+"
"😀💩😱"
1赞
Elliott Frisch
5/15/2023
这位已故的艺术家,原名普林斯,想说一句话。
1赞
Elliott Frisch
5/15/2023
“你永远不应该用数字写单词,除非你七岁或你的名字是王子” -- 文字犯罪 - 奇怪的艾尔
0赞
Bohemian
5/15/2023
@Elliott同意了。甚至 Seven of Nine 也避开了数字。
0赞
Elliott Frisch
5/15/2023
#2
首先,您不能更改 的签名(需要 )。其次,您可以使用正则表达式来确定 的任何部分是否为数字。假设您打算检查是否也不包含数字,我建议您使用 .一对无限循环之类的东西,main
String[]
String
nameL
Pattern
public static void main(String[] args) {
// Initializing variables
// Setting up scanner
Scanner inputs = new Scanner(System.in);
String nameF = "null";
String nameL = "null";
String gender = "null";
int age = 0;
Pattern containsDigit = Pattern.compile(".*[0-9].*"); // .*\\d.* also works
// Initiating user input
while (true) {
System.out.println("Please type in your first name.");
nameF = inputs.nextLine();
if (!containsDigit.matcher(nameF).matches()) {
break;
}
}
while (true) {
System.out.println("Please type in your last name.");
nameL = inputs.nextLine();
if (!containsDigit.matcher(nameL).matches()) {
break;
}
}
System.out.printf("Hello %s %s%n", nameF, nameL);
}
评论
nameF
nameF
"null"
"null"
null
if(true)
while
checkF