5

私はこのコードを持っています:

private void submitPstart() {

    if (tStock.getText().charAt(0)>='A' && tStock.getText().charAt(0)<='Z'){


    }else {
        errorBox ("Uppercase A-Z");
    }

    tStock.setText("");
    tStock.setFocus();
}

これは機能していますが、テキストボックスに何も置かずにOKボタンを押すとクラッシュします。それは言います:

java.lang.StringIndexOutOfBoundsException: String index out of range: 0

そして、この部分を指摘しました:if (tStock.getText().charAt(0)>='A' && tStock.getText().charAt(0)<='Z')

どんな助けでも大歓迎です。ありがとう

4

5 に答える 5

7

getText()が長さ 0 (つまり空の) 文字列を返すかどうかを確認する必要があります。

もしそうなら、最初のキャラクターを引き出そうとしないでください!(経由charAt())

コメントアウトされたチェックは、既存の文字チェックのlength()に行う必要があることに注意してください。

フレームワーク/ソリューションなどによっては、null 文字列が返されているかどうかも確認したい場合があります。このチェックを簡潔に実行するApache Commons の StringUtils.isEmpty()メソッドに注意してください。

于 2012-10-29T09:19:42.163 に答える
3

null と長さが 0 より大きいことを確認する必要があります。

 if (tStockPIStart!=null && tStockPIStart.getText().length()>0 && tStockPIStart.getText().charAt(0)>='A' && tStockPIStart.getText().charAt(0)<='Z'){
于 2012-10-29T09:21:30.873 に答える
2

試す

if (tStockPIStart.getText().length() > 0 && tStockPIStart.getText().charAt(0)>='A' && tStockPIStart.getText().charAt(0)<='Z')

あなたの場合、テキストが空の場合、返される長さは 0 になります。したがって、charAt(..) メソッドは例外をスローします。そのため、比較しようとしているテキストが空かどうかを最初に確認する必要があります。

于 2012-10-29T09:21:06.630 に答える
2

追加

if (tStockPIStart!=null && tStockPIStart.length>0) {
    [...]
}
于 2012-10-29T09:21:09.450 に答える
0

Java 7 にはisEmptyメソッドがあり、コードをもう少し表現力豊かにするために使用できます。

if (tStockPIStart.getText()!=null && !tStockPIStart.getText().isEmpty()) {
    //do stuff
}

これは行うことと同じですが、length != 0個人的にはもう少し明確だと思います。

于 2012-10-29T09:28:30.257 に答える