我有以下问题:
用户必须在我的程序中正确输入他的名字:
例如,程序只接受此表格:
"名称"或"名字 - 第二名"或"名字第二名"。
第3点在我的代码中不起作用:(
我的Java代码:
public class Test {
private static Scanner scanner = new Scanner(System.in);
private static String name;
public static void main(String[] args) {
boolean check = false;
check = checkName();
System.out.println("Check= "+check);
output(check);
}
public static void output(boolean check) {
if (check == false) {
System.out.println("Fehler");
}
if(check == true) {
System.out.println("Dein Name ist: "+name);
}
}//End output()
public static boolean checkName() {
System.out.print("Name: ");
name = scanner.nextLine();
boolean check = false;
if(name.charAt(0) >= 'A' && name.charAt(0) <= 'Z') {
for(int i=1; i < name.length(); i++) {
if (name.charAt(i) >= 'a' && name.charAt(i) <= 'z') {
check = true;
} else if (name.charAt(i) == '-') {
i++;
if(name.charAt(i) >= 'A' && name.charAt(i) <= 'Z') {
check = true;
} else {
check = false;
}
} else if (name.charAt(i) == ' ') {
i++;
if(name.charAt(i) >= 'A' && name.charAt(i) <= 'Z') {
check = true;
} else { check = false;
}} else {
check = false;
break;
}
}
} return check;
}//End checkName()
有人可以帮忙吗?
答案 0 :(得分:2)
这看起来像是使用正则表达式的好地方。以下示例如何:
String name = scanner.nextLine();
if (Pattern.compile("^[A-Z][a-z]*(?:(?: |-)[A-Z][a-z]*)?$").matcher(name).find()) {
// Valid Name
}
这会针对正则表达式检查变量name
以查看它是否匹配。解释正则表达式:
^
这意味着字符串的开始。
[A-Z][a-z]*
这意味着大写字母后跟零个或多个小写字母。
((?: |-)[A-Z][a-z]*)?
这意味着后跟一个带有大写后跟可选小写字符的空格或连字符 - 此部分是可选的,因为该组后跟?
。
$
这意味着字符串结束。
您也可以使用更简单的String.matches()
,而不是Pattern.compile().matcher()
。