0

null値をチェックして、Swingフォームからの入力を検証しようとしています。ただし、checkFirstNameメソッドは常にtrueを返します。したがって、たとえば、フォームで名を空白のままにすると、フィールドがnullであってもtrueが返されます。

これが私の2つの方法です。最初の方法は、ユーザーが保存ボタンをクリックしたときに発生します。

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;
    }

何か間違ったことをしたことがありますか?これは、firstnameフィールドがnullであるため、falseを返す必要があります。

4

6 に答える 6

3

Stringがnullになることはなく、がString空になります。チェックしてくださいfirstName.isEmpty()。それでも、nullのチェックも続けることをお勧めします。

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

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

編集:Windleが指摘しているように、文字列に少なくとも1つの非空白があるかどうかを確認したいと思うでしょう。

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

また、より複雑な検証を実行することもできます。たとえば、ユーザー名をトリミングした後、ユーザー名に空白がないことを確認したい場合などです。

于 2013-02-07T14:49:32.187 に答える
1

たとえば、フォームで名前を空白のままにすると

をチェックしているだけなので、空の文字列チェックもnull行う必要があります。("")

次のようになります。

if (firstName != null && !"".equals(firstName.trim()) {
于 2013-02-07T14:50:17.430 に答える
0

したがって、たとえば、フォームで名を空白のままにすると、フィールドがnullであってもtrueが返されます。

これはあなたの推論が間違っているところです。テキストフィールドを空白のままにすると、 nullではない空の文字列getText()が返されます。の代わりに空をチェックする必要があります。""null

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

firstName可能性がある場合(nullたとえば、別のソースからのものである場合)、事前に確認する必要があります。

if (firstName != null && !firstName.isEmpty()) { ... }
于 2013-02-07T14:53:16.400 に答える
0

メソッドが空のtxtNCustomerFirstName.getText文字列を返しています。メソッドの if ステートメントを変更checkFirstNameして、空の文字列をチェックすることができます。

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

Java 6+ をお持ちでない場合は、firstName.length() > 0代わりにisEmpty.

于 2013-02-07T14:50:40.277 に答える
0

私の知る限り、saveNewCustomer() で呼び出している getText() メソッドは、null ではなく空の文字列を返します。

于 2013-02-07T14:51:09.940 に答える
0

他の回答が示唆しているように、空の文字列チェックでnullチェックを行います。実際にはそのような状況を避けたいので、空のチェックを行う前に、先頭と末尾の空白も削除することをお勧めします。

if (firstName != null && !firstName.trim().isEmpty()) { ... }
于 2013-02-07T14:57:23.510 に答える