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

Array error java.lang.ArrayIndexOutOfBoundsException: length=1; index=1

我有一个格式为 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;
    }
}

我该如何解决这个错误?

编辑:已修复,我不小心将 : 而不是 ; 作为我的数组项之一。

您在 "New Brunswick:Fredericton" 中有错字,需要分号而不是常规冒号

 String[] split = bonusArray[k].split(";");

您只是假设,您将始终获得包含 2 个元素的 split 变量。在这种情况下,您的输入有一些元素在拆分时没有 return 2 个元素,split() 不是真正的 returning 2 个元素,这就是为什么 ArrayIndexOutOfBoundsException.

在访问指定索引处的元素之前始终检查 "array length"。

编辑: "New Brunswick:Fredericton" 在此字符串上调用 split(";") 不会 return 2 个元素。

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

所以这段代码

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

的数组

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

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

"New Brunswick:Fredericton" 不包含“;” . 尝试将 split() 和 [0], [1] 部分嵌入 try-catch 块中,以确保不会出现 OutOfBoundsException。

我们可以通过多种方式做到这一点,但最好的方法是使用 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;
    }
}