我有一个格式为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;
}
}
如何解决此错误?
编辑:已修复,我不小心将:
而不是;
放在了我的一个数组项中。
答案 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;
}
}