2013-02-07 110 views
0

我想通過檢查空值來驗證Swing表單的某些輸入。但是checkFirstName方法總是返回true。因此,例如,如果我將第一個名字留在窗體上,它將返回true,即使該字段爲空。Java if語句總是返回true

這是我的兩個方法,第一個方法是當用戶點擊保存按鈕時觸發的。

public void saveNewCustomer() throws SQLException, ClassNotFoundException { 

     boolean dbOK = false;//boolean to check if data input is not null 

     System.out.println(dbOK); 
     String firstName = txtNCustomerFirstName.getText(); 
     String lastName = txtNCustomerLastName.getText(); 

     if (checkFirstName(firstName)) { 
      dbOK = true; 
     } else { 
      lblNCustFirstNameError.setText("First Name Must be Entered"); 
      dbOK = false; 
     } 
     System.out.println(dbOK); 

     if (dbOK) { 
      dbConnector.insertSignup(firstName, lastName); 
      System.out.println("Success"); 
     } else { 
      System.out.println("Error"); 
     } 
    } 

    public boolean checkFirstName(String firstName) { 
     boolean allOK = false; 
     System.out.println(allOK); 

     if (firstName != null) { 
      allOK = true; 
     } else { 
      allOK = false; 
     } 
     return allOK; 
    } 

我做了什麼錯誤,因爲這對我應該返回false導致firstname字段爲空。

+1

'firstname'確實是null還是隻是空的?我建議使用Apache Commons中的'StringUtils'類:http://commons.apache.org/lang/api-3.1/org/apache/commons/lang3/StringUtils.html –

+0

你試過'!firstName .isEmpty()'?調試器應該是你最好的朋友... – predi

+1

你可以縮短你的代碼。相反'布爾標誌=假;如果(contidion){flag = true;} else {flag = false;}返回標誌;'使用'返回條件;' – Pshemo

回答

1

因此,舉例來說,如果我離開這個名字的空白表單

你只是檢查null上,你需要做的空("")字符串檢查也。

它應該是這樣的:

if (firstName != null && !"".equals(firstName.trim()) { 
+0

感謝您的回答。 – user667430

+0

@ user667430:不客氣。祝你好運! – kosa

+0

還應該修剪它,以防空白字符(當然在空檢查之後)。 – CPerkins

3

String永遠不會爲空,String將爲空。檢查firstName.isEmpty()。不過我建議你保持檢查空太:

public boolean checkFirstName(String firstName) { 
    boolean allOK = false; 
    System.out.println(allOK); 

    if (firstName != null && !firstName.isEmpty()) { 
     allOK = true; 
    } else { 
     allOK = false; 
    } 
    return allOK; 
} 

編輯:由溫德爾指出,你可能想檢查字符串中有至少一個非空白:

if (firstName != null && !firstName.trim().isEmpty()) 

而且您可以執行更復雜的驗證 - 例如,如果要在修剪後確保用戶名中沒有空格,則可以執行更復雜的驗證。

+0

@Nambari謝謝。太多的語言......我不時困惑:)修正。 –

+2

@Nambari http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#isEmpty%28%29 – predi

+0

@predi也謝謝你。我知道我不能**那**混淆:) –

0

txtNCustomerFirstName.getText方法返回一個空字符串。你可能會改變你的checkFirstName方法的if語句來檢查一個空字符串:

if (firstName != null && !firstName.isEmpty()) { 

如果您沒有安裝Java 6+,您可以使用firstName.length() > 0而不是isEmpty

0

據我所知,您在saveNewCustomer()中調用的getText()方法將返回一個空字符串而不是null。

0

因此,例如,如果我留下名字空白的形式它將 返回true,即使該字段爲空。

這是你的推理錯誤的地方。當您將文本字段留空,getText()返回空字符串""這是非空。你應該檢查空虛而不是null

if (!firstName.isEmpty()) { ... } 

如果firstName也可以是null(例如當它來自另一個來源),你應該事先檢查:

if (firstName != null && !firstName.isEmpty()) { ... } 
0

如其他答案建議做一個空檢查與空字符串。我會說,在做空檢查之前,先修整前後的空格,因爲實際上你想避免這種情況。

if (firstName != null && !firstName.trim().isEmpty()) { ... }