2013-02-07 99 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()) { ... }