如何解决字符串索引超出界限异常

时间:2017-04-06 21:46:15

标签: java string char

for (int i = 0; i < data.length; i++) {
    if (data[i].toString() != null) {
        char a = data[i].toString().charAt(0);

        if (a == a1) {
            if (distance(data[i], keyword) < 5) {
                Log.d("sjdhkshdjjjjjjjjjjjjjj", data[i]);
                dist.add(distance(data[i], keyword));
                sound.add(data[i]);
            }
        }
    }
}

它在从data [] .tostring()访问第一个字符的行上给出了异常。

2 个答案:

答案 0 :(得分:0)

data[i]可能是一个空的(但已初始化的)字符串,并且您正在尝试推断其第一个字符,因此异常会上升。

正确的检查仍会检查数据是否为空,但也包含至少一个字符;

if (data[i].toString() != null && !data[i].toString().isEmpty())

我也会避免对toString()的所有调用,只需将其调用一次,将结果保存在临时的String变量中;你只是扔掉了不必要的循环,并且在多任务系统中,每次调用之间的结果可能不同,使得所有代码都变得疯狂。基本上,学习永远是一个好习惯。

答案 1 :(得分:0)

这些更改可以让您避免一些例外

for (int i = 0; i < data.length; i++) {
        if(data[i]==null) continue ; //Add this
        if (data[i].toString() != null &&  data[i].toString().length>0) {//Another change
            char a = data[i].toString().charAt(0);

            if (a == a1) {
                if (distance(data[i], keyword) < 5) {
                    Log.d("sjdhkshdjjjjjjjjjjjjjj", data[i]);
                    dist.add(distance(data[i], keyword));
                    sound.add(data[i]);
                }
            }
        }
    }