2017-02-21 85 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()