StringIndexOfBoundException

StringIndexOfBoundException

下面的代码使我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));
}

最佳答案

首先,您从哪里得到例外?

仅当custom.getName().subString(0,1)为空时,StringIndexOfBoundException才会引发custom.getName()。但是,如果为空,则代码将不会进入else分支,因此无法获取异常。

其次,第二种方法不等于第一种:如果custom.getName()既不为空,也不为"0"添加任何内容。



我觉得这是一个改进:

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

07-27 13:35