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仅当custom.getName()为空时才抛出。但是如果它是空的,代码将不会进入else分支,所以你不能得到异常。

其次,第二种方式不等同于第一种方式: ifcustom.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

在这种else if情况下,您需要检查字符串“custom.getName().length() >= 2”。

于 2013-06-26T14:06:35.697 回答
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 回答