2014-09-05 36 views
0

我覺得這是檢查的時間越長,繁瑣和低效的方式:如何有效檢查兩個字符串是相同的,它們的非空

  • 該密碼字段不爲空
  • 那這兩個密碼相匹配
  • 兩個密碼是不一樣的

private void checkPasswordSame() { 
     String first = password1.getText(); 
     String second = password2.getText(); 
     if (first.equals("")) { 
      System.out.println("Password can't be empty"); 

      if ("".equals(second)) { 
       System.out.println("Second password is empty"); 
      } 
     } else if (first.equals(second)) { 
      System.out.println("Passwords same"); 
     } else { 
      System.out.println("Passwords not the same"); 
     } 

} 

有沒有辦法以較少的行數來做到這一點?

+0

爲什麼所有的等於(「」)在這個問題和答案? isEmpty()方法有什麼問題?有沒有我不知道的一些魔術迷你優化技巧? – Gimby 2014-09-05 07:58:25

回答

2

如果你不關心哪個字段爲空既是必須填寫,可以簡化空虛查了一下:

private void checkPasswordSame() { 
    String first = password1.getText(); 
    String second = password2.getText(); 
    if (first.equals("") || second.equals("")) { 
     System.out.println("Both password can't be empty"); 
    } else if (first.equals(second)) { 
     System.out.println("Passwords same"); 
    } else { 
     System.out.println("Passwords not the same"); 
    } 
} 

儘量不要把重點放在代碼長度,這不是編程高爾夫;代之以專注於代碼可讀性。如果你至少沒有提供評論來解釋棘手的部分,你應該對另一位讀者一目瞭然。

作爲一個風格問題,我更喜歡檢查錯誤首先處理正常情況下過,但它給你:

private void checkPasswordSame() { 
    String first = password1.getText(); 
    String second = password2.getText(); 
    if (first.equals("") || second.equals("")) { 
     System.out.println("Both password can't be empty"); 
    } else if (!first.equals(second)) { 
     System.out.println("Passwords not the same"); 
    } 
    else { 
     System.out.println("Passwords same"); 
    } 
} 
0

你離開雲這些行:

 if ("".equals(second)) { 
      System.out.println("Second password is empty"); 
     } 

如果第一個密碼不爲空,但第二個是用戶將得到「密碼不一樣」 - 我認爲這是一個真正的和足夠的信息在這種情況下。

0

可以切換檢查方式: 1.is比賽。 2.不空。

if (first.equals(second)) 
{ 
    //check one is enough 
    if(first == null || first.isEmpty()) 
    { 
     System.out.println("Password can't be empty"); 
    } 
    else 
    { 
     System.out.println("Passwords same"); 
    } 
} 
else 
{ 
    System.out.println("Passwords not the same"); 
} 
+0

第4行的if(first == null || ...)沒用,如果first == null,你會得到第1行的NPE。 – blafasel 2014-09-05 09:00:36

+0

yes,編輯時出錯,謝謝 – elevenights 2014-09-05 09:04:27

0

有效的並不意味着更少的代碼行。 您確定要使用較少的代碼行嗎?或者你想要一個更快的方法? 下面你有一個更快的方法。

private void checkPasswordSame() { 

     final String first = password1.getText(); 
     final String second = password2.getText(); 

     final boolean firstIsEmpty = first.isEmpty(); 
     final boolean secondIsEmpty = second.isEmpty(); 

     if (firstIsEmpty) { 
     System.out.println("Password can't be empty"); 
     } 

     if (secondIsEmpty) { 
     System.out.println("Second password is empty"); 
     } 

     if (!firstIsEmpty && !secondIsEmpty) { 

     if (first.equals(second)) { 
      System.out.println("Passwords same"); 
     } else { 
      System.out.println("Passwords not the same"); 
     } 
     } 
    } 

注:

  1. 使用#isEmpty()方法更快
  2. 你可能想看看第二密碼是空的,即使第一個是空的(這就是爲什麼我沒有」 t包括第二個如果在第一個)
相關問題