0

以下のコードは私をスローしますStringIndexOfBoundException

if (custom.getUser().equals("0") || custom.getUser().equals("")) {
    vital.add(new Pair<String, String>("User", "-"));
} else {
    vital.add(new Pair<String, String>("User", custom.user() + "F" + "\n" + custom.getName().subString(0,1));
}

文字列の最初の文字を表示します。以下のコードは正常に動作していますが、それが正しい方法であるかどうかはわかりません。

String name = "";
if (custom.getUser().equals("0") || custom.getUser().equals("")) {
    vital.add(new Pair<String, String>("User", "-"));
} else if (!custom.getName().equals("")) {
    name = custom.getName().substring(0, 1);
} else {
    vital.add(new Pair<String, String>("User", custom.user() + "F" + "\n" + name));
}
4

3 に答える 3

1

まず、どこから例外を取得しますか?

custom.getName().subString(0,1)が空のStringIndexOfBoundException場合のみa をスローします。custom.getName()ただし、空の場合、コードはelseブランチに入らないため、例外を受け取ることはできません。

次に、2 番目の方法は最初の方法と同等ではありcustom.getName()ませ"0"vital


これは改善だと思います:

if (custom.getUser().equals("0") || custom.getUser().isEmpty()) {
    vital.add(new Pair < String, String > ("User", "-"));
} else {
    // limit scope of variable to else-branch
    String name = ""; 
    // check empty string with isEmpty
    if (!custom.getName().isEmpty()) {
        name = custom.getName().substring(0, 1);
    }
    // add a new Pair in any case
    vital.add(new Pair < String, String > 
       ("User", custom.user() + "F" + "\n" + name));
}
于 2013-06-26T14:06:26.963 に答える
0

最初のブロックで論理エラーが発生しました。空の文字列 ( custom.getName().equals("")) を使用してブロックに入ることができます。つまり、custom.getName().length() == 0. したがって、最初の文字を取得しようとするとsubstring(0,1)StringIndexOfBoundException. 条件を次のように変更するだけです。

if (custom.getUser().equals("0") || custom.getName().length() > 0) {
于 2013-06-26T14:03:04.077 に答える
0

条件ではelse if、文字列 "custom.getName().length() >= 2" かどうかを確認する必要があります。

于 2013-06-26T14:06:35.697 に答える