输入字符串if if不起作用

时间:2017-02-21 16:31:30

标签: java string if-statement input

我有以下问题:

用户必须在我的程序中正确输入他的名字:

  1. 这个名字只包含字母,连字符" - "和空白" "
  2. 第一个字母应该是大写字母。
  3. 在空格或连字符之后应跟大写字母。
  4. 例如,程序只接受此表格:

    "名称"或"名字 - 第二名"或"名字第二名"。

    第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()
    

    有人可以帮忙吗?

1 个答案:

答案 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()