2017-02-21 70 views
0

我有以下问题:输入字符串,如果不工作

用户必须正确地把他的名字在我的计划:

  1. 名称只能包含字母,连字符“ - ”和空格“”
  2. 第一个字母应该是大写字母。
  3. 空白或连字符后应紧跟一个大写字母。

仅举例此表格由程序接受:

“名称”或“名字-Secondname”或“名字Secondname”。

第三点没有在我的代码:(

我的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

你需要正则表达式来实现它。 – DNAj

+1

请正确缩进您的代码。 – f1sh

+2

摆脱那个'check'变量。你应该只是'返回false;'你当前设置的任何地方'check = false'。并在checkName方法的末尾用'return false;'替换'return check;'。在'for'循环之后添加一个'return true;'但是说实话,你的'i ++'还会有其他问题,导致你在字符串末尾运行。就像其他人所说的那样,正则表达式可以很好地工作,但基于你编写的代码,这对你来说可能有点高级。 – neildo

回答

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