将用户的字符串输入限制为字母和数字值
基本上,我的情况要求我检查键盘用户输入定义的字符串是否仅在一种情况下是字母字符而在另一种情况下只是数字。 这是用Java编写的。
我目前的代码:
switch (studentMenu) { case 1: // Change all four fields System.out.println("Please enter in a first name: "); String firstNameIntermediate = scan.next(); firstName = firstNameIntermediate.substring(0,1).toUpperCase() + firstNameIntermediate.substring(1); System.out.println("Please enter in a middle name"); middleName = scan.next(); System.out.println("Please enter in a last name"); lastName = scan.next(); System.out.println("Please enter in an eight digit student ID number"); changeID(); break; case 2: // Change first name System.out.println("Please enter in a first name: "); firstName = scan.next(); break; case 3: // Change middle name System.out.println("Please enter in a middle name"); middleName = scan.next(); break; case 4: // Change last name System.out.println("Please enter in a last name"); lastName = scan.next(); case 5: // Change student ID: changeID(); break; case 6: // Exit to main menu menuExit = true; default: System.out.println("Please enter a number from 1 to 6"); break; } } } public void changeID() { studentID = scan.next(); }
我需要确保StudentID只是数字,每个名称段都是按字母顺序排列的。
java.util.Scanner
已经可以使用hasNextXXX
方法检查下一个标记是否具有给定模式/类型。
下面是一个使用boolean hasNext(String pattern)
来validation下一个标记只包含字母的示例,使用正则表达式[A-Za-z]+
:
Scanner sc = new Scanner(System.in); System.out.println("Please enter letters:"); while (!sc.hasNext("[A-Za-z]+")) { System.out.println("Nope, that's not it!"); sc.next(); } String word = sc.next(); System.out.println("Thank you! Got " + word);
这是一个示例会话:
Please enter letters:
@#$
Nope, that's not it!
123
Nope, that's not it!
james bond
Thank you! Got james
要validation下一个标记是否可以转换为int
的数字,请使用hasNextInt()
然后使用nextInt()
。
相关问题
- 使用java.util.Scannervalidation输入 – 有很多例子!
使用正则表达式执行此操作可能最简单。 这是一些示例代码:
import java.util.regex.*; public class Test { public static void main(String[] args) throws Exception { System.out.println(isNumeric("123")); System.out.println(isNumeric("abc")); System.out.println(isNumeric("abc123")); System.out.println(isAlpha("123")); System.out.println(isAlpha("abc")); System.out.println(isAlpha("abc123")); } private static final Pattern NUMBERS = Pattern.compile("\\d+"); private static final Pattern LETTERS = Pattern.compile("\\p{Alpha}+"); public static final boolean isNumeric(String text) { return NUMBERS.matcher(text).matches(); } public static final boolean isAlpha(String text) { return LETTERS.matcher(text).matches(); } }
您应该编写“getAlphaInput”和“getNumericInput”方法,这些方法执行相应的prompt / fetch / check循环,直到输入正确为止。 或者可能只是getInput(Pattern)
以避免为不同的模式编写类似的代码。
您还应该围绕什么算作“字母”来制定要求 – 上面只有az和AZ ……如果你还需要处理重音等,你应该仔细查看Pattern
文档并进行适当的调整。
请注意,您可以使用正则表达式来validation字符串长度等内容。 他们非常灵活。
我不确定这是最好的方法,但你可以像这样使用Character.isDigit()和Character.IsLiteral()mabybe:
for( char c : myString.toCharArray() ) { if( !Character.isLiteral(c) ) { // } }
尝试regexp:\ d + – 数字,[A-Za-z] + – 按字母顺序排列
我认为您不能阻止用户输入无效值,但您可以选择validation收到的数据。 我是正则表达的粉丝。 真的很快,可能是这样的(所有值都初始化为空字符串):
while (!firstName.matches("^[a-zA-Z]+$")) { System.out.println("Please enter in a first name"); firstName = scan.next(); } ... while (!studentID.matches("^\\d{8}$")) { System.out.println("Please enter in an eight digit student ID number"); changeID(); }
如果你走这条路,你也可以对需要validation的不同情况进行分类,并创建一些帮助方法来处理每个问题。
“正则表达式”在开始时往往看起来势不可挡,但学习它有很大的价值,并且不乏教程。
那是代码
public class InputLetters { String InputWords; Scanner reader; boolean [] TF; boolean FT; public InputLetters() { FT=false; while(!FT){ System.out.println("Enter that you want to: "); reader = new Scanner(System.in); InputWords = reader.nextLine(); Control(InputWords); } } public void Control(String s){ String [] b = s.split(" "); TF = new boolean[b.length]; for(int i =0;i