如何只允许用户的字符输入并进行验证?



在下面的代码中,我试图让用户输入 3 个单独的输入,每个输入 3 个字母。但是,我找不到一种方法可以让扫描仪只取一个字符并验证 a-zA-Z。任何帮助都非常感谢,

Scanner scnObj = new Scanner(System.in);
System.out.println("enter 3 letters");
char input1;
do {
input1 = scnObj.next(".").charAt(0);
if ((!Pattern.compile("[a-zA-Z]*").matcher(input1).matches())) {
System.out.println("Please try again.");
}
} while (!Pattern.compile("[a-zA-Z]*").matcher(input1).matches());
System.out.println("enter 2nd letter");

我修改了一下你的代码:

Scanner scnObj = new Scanner(System.in);
System.out.println("enter 3 letters");
String input1 = null;
do {
input1 = scnObj.next();
if ((!Pattern.compile("[a-zA-Z]{1}").matcher(input1).matches())) {
System.out.println("Please try again.");
}
} while (!Pattern.compile("[a-zA-Z]{1}").matcher(input1).matches());
System.out.println("enter 2nd letter");

工作示例:

Scanner scnObj = new Scanner(System.in);
String result = "";
do {
System.out.println("enter the letter number " + (result.length() + 1));
char input1 = scnObj.next(".").charAt(0);
if ((!Pattern.compile("[a-zA-Z]*").matcher(String.valueOf(input1)).matches())) {
System.out.println("Please try again.");
} else {
result += input1;
}
} while (result.length() < 3);
System.out.println("Your result is: " + result);

您还可以将所需的正则表达式模式传递给Scanner.next()方法。举个例子:

Scanner scnObj = new Scanner(System.in);
System.out.println("enter 3 letters");
List<Character> inputCharacters = new ArrayList<>(3);
String input1;
do {
try {
System.out.println("Enter letter no " + (inputCharacters.size() + 1));
input1 = scnObj.next("[a-zA-Z]");
inputCharacters.add(input1.charAt(0));
} catch (Exception nse) {
scnObj = new Scanner(System.in);
System.out.println("Please try again.");
}
} while (inputCharacters.size() < 3);
System.out.println("Input characters are " + inputCharacters);

您可以直接使用 System.in。

List<Character> chars = new ArrayList<>();
try {
// do until chars contains required number of characters
while (chars.size() < 3) {
// read in a character
char ch = (char) System.in.read();
// ignore EOL delimiters
if (ch == 'r' || ch == 'n') {
continue;
}
// if not a letter, clear input buffer and
// let the user know.
if (!Character.isLetter(ch)) {
int cnt = System.in.available();
System.in.readNBytes(cnt);
System.out.println("Invalid character encountered, please try again.");
} else {
chars.add(ch);
}
}
}
catch (Exception e) {
e.printStackTrace();
}
System.out.println(chars);

最新更新