我正在创建一个打印用户详细信息的程序,首先用户输入他们的详细信息,然后程序正确格式化细节并将其打印在格式化的框中。我希望程序读取字符串并查看用户是否输入了无效字符。例如,下面的代码请求用户名:
// this code below is used to find the largest string in my program, ignore if this wont interfere
String fname = scan.nextLine(); //main scan point.
//below is used to calculate largest string inputted by the user.
int input = 0;
int fnamelength1 = fname.length();
input = fnamelength1;
int longest = 0;
if(input > longest)
longest = input;
如果此时用户输入@ ~~ NAME ~~ @作为他们的名字,程序当前允许...我想让程序读取用户输入的内容并打印消息,如果他们的输入不是&# 39; t correct例如包含无效符号。
编辑:
我将字母表中除字符以外的任何内容视为无效......因此任何数字或符号均无效。
VALID:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
同样有效:
' - .
答案 0 :(得分:1)
这可以使用String.matches方法的正则表达式来完成。在这里定义一个模式,如果字符串与您的模式匹配,那么它可以被认为是有效的:
String fname;
Scanner scan = new Scanner(System.in);
boolean invalidInput;
do{
System.out.println("Enter a valid name");
fname = scan.nextLine();
invalidInput = fname.matches("[^a-zA-Z'-]]");
if(invalidInput){
System.out.println("That's not a valid name");
}
}while (invalidInput);
System.out.println("Name: " + fname);
修改强>
使用String.matches,我们无法对无效字符进行全局搜索(在这种情况下我们想要的)。因此最好使用Matcher.find:
String fname;
Scanner scan = new Scanner(System.in);
boolean invalidInput;
Pattern pattern = Pattern.compile("[^a-zA-Z'\\-\\s]");
do{
System.out.println("Enter a valid name");
fname = scan.nextLine();
invalidInput = pattern.matcher(fname).find();
if(invalidInput){
System.out.println("That's not a valid name");
}
}while (invalidInput);
System.out.println("Name: " + fname);
这次模式将验证字符串中任何位置的无效字符。
答案 1 :(得分:0)
一种方法是使用正则表达式以及String.matches()
方法。
举个例子:
String fname;
... some code to get fname ...
boolean valid = fname.matches("[a-zA-Z]+");
当且仅当valid
是包含字母字符且不为空的字符串时, fname
应该为真。
如果空字符串也有效,则:
boolean valid = fname.matches("[a-zA-Z]*");
查找Java类Pattern以获取其他变体。