对字符串进行拆分操作后出现ArrayIndexOutOfBoundsException错误

时间:2011-04-22 18:50:12

标签: java string

我对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];

             }

3 个答案:

答案 0 :(得分:4)

split()不会返回尾随空字符串。您必须在代码中允许这样做。 使用split()的双参数版本并传递负数作为第二个参数。

来自javadoc:

  

此方法就像通过调用一样工作   两个参数的分裂方法   给定表达式和限制参数   零。尾随空字符串   因此不包括在内   结果数组。

答案 1 :(得分:3)

这意味着split()返回了一个包含单个元素的数组,并且您正在尝试访问第二个元素。评估TempCity.length会向您显示它是'1'

打印TempCity[0],看看它是什么;它将是你的整个输入字符串(cityNames [i])。

答案 2 :(得分:0)

如果要用其他内容覆盖String[] TempCity = new String[2];,则执行TempCity无效。