我对ArrayIndexOutOfBoundsException
我很困惑。使用split方法后,我无法分配数组TempCity
的值。
String[] TempCity = new String[2];
cityNames = props.getProperty("city.names").split(",");
cities = new City [cityNames.length];
//I have also tried String[] TempCity without succes
for (int i = 0; i < cities.length; i++) {
System.out.println(TempCity[1]); //OK
TempCity = cityNames[i].split(":"); // returns String array, problem is when Strings look like "something:" and do not receive second value of array
System.out.println(TempCity[1]); //Error
try{
if (TempCity[1] == null){}
}
/* I was thinking about allocating second array's value in catch */
catch (Exception e)
{
TempCity[1] = new String();
//I'm getting Exception in thread "main"java.lang.ArrayIndexOutOfBoundsException: 1
}
try{
cities[i] = new City( TempCity[0], TempCity[1] );
...
感谢您的帮助! 目前,我的解决方案涉及创建另一个字符串数组:
String[] temp = new String[2];
String[] tempCity = new String[2];
temp = cityNames[i].split(":");
for (int j = 0; j < temp.length; j++){
tempCity[j] = temp[j];
}
答案 0 :(得分:4)
split()
不会返回尾随空字符串。您必须在代码中允许这样做。
使用split()
的双参数版本并传递负数作为第二个参数。
来自javadoc:
此方法就像通过调用一样工作 两个参数的分裂方法 给定表达式和限制参数 零。尾随空字符串 因此不包括在内 结果数组。
答案 1 :(得分:3)
这意味着split()
返回了一个包含单个元素的数组,并且您正在尝试访问第二个元素。评估TempCity.length
会向您显示它是'1'
打印TempCity[0]
,看看它是什么;它将是你的整个输入字符串(cityNames [i])。
答案 2 :(得分:0)
如果要用其他内容覆盖String[] TempCity = new String[2];
,则执行TempCity
无效。