数组错误java.lang.ArrayIndexOutOfBoundsException:length = 1;索引= 1

时间:2018-10-25 20:35:21

标签: java arrays android-studio indexoutofboundsexception

我有一个格式为province;capital的数组。

provArray = new String[] { "Alberta;Edmonton", "British Columbia;Victoria", "Manitoba;Winnipeg", "New Brunswick:Fredericton",
            "Newfoundland and Labrador;St.John's", "Nova Scotia;Halifax", "Ontario;Toronto", "Prince Edward Island;Charlottetown",
            "Quebec;Quebec City", "Saskatchewan;Regina", "Northwest Territories;Yellowknife", "Nunavut;Iqaluit", "Yukon;Whitehorse",
            "Alabama;Montgomery", "Alaska;Juneau", "Arizona;Phoenix", "Arkansas;Little Rock", "California;Sacramento", "Colorado;Denver",
            "Connecticut;Hartford"};

然后我有一个for循环,用于将省份与首都分开(在“;”之前和之后)。但是由于某种原因,我得到了错误java.lang.ArrayIndexOutOfBoundsException: length=1; index=1

for(int k = 0; k < bonusArray.length; k++){
    String[] split = bonusArray[k].split(";");
    String prov = split[0];
    String cap = split[1];

    if(prov.equals(answer)){
       bonusAnswer = cap;
    }
}

如何解决此错误?

编辑:已修复,我不小心将:而不是;放在了我的一个数组项中。

5 个答案:

答案 0 :(得分:3)

数组中的值没有;(分号),例如New Brunswick:Fredericton

这样的代码

String[] split = bonusArray[k].split(";");给出一个长度= 1的数组

这将导致异常String cap = split[1];,因为您只能访问split[0](记住length = 1)。

因此,您必须确保数组中的每个元素都具有;,或者在访问变量值之前检查split变量的长度。

答案 1 :(得分:2)

您在“新不伦瑞克省:弗雷德里克顿”中有错字,需要用分号和常规冒号

答案 2 :(得分:1)

Map<A,List<C>> mapC

您只是假设,您将始终获得包含2个元素的 String[] split = bonusArray[k].split(";"); 变量。在这种情况下,您的输入包含一些元素,这些元素在拆分时不会返回2个元素,split并没有真正返回2个元素,这就是split()的原因。

在访问指定索引处的元素之前,始终检查“数组长度”。

编辑: “ New Brunswick:Fredericton”在此字符串上调用ArrayIndexOutOfBoundsException不会返回2个元素。

答案 3 :(得分:0)

“新不伦瑞克省:弗雷德里克顿”不包含“;” 。 尝试将split()和[0],[1]部分嵌入try-catch块中,以确保不会发生OutOfBoundsException异常。

答案 4 :(得分:0)

我们可以用多种方法来做到这一点,但是最好的方法是使用split.length-1而不是使用硬编码的值作为索引。使用此方法,即使数组长度为1,也永远不会出现此异常。

for(int k = 0; k < bonusArray.length; k++){
    String[] split = bonusArray[k].split(";");
    String prov = split[0];
    String cap = split[split.length-1];

    if(prov.equals(answer)){
       bonusAnswer = cap;
    }
}