【问题标题】:Getting array index out of bounds when splitting a string in android在android中拆分字符串时使数组索引越界
【发布时间】:2013-08-12 05:11:31
【问题描述】:

我正在开发安卓系统。我有一个如下所示的字符串。

String str = "@test1|test2|test3@test4|test5|test6|test7@test8|test9|test10|test11@test12|test13|test14|test15@......"

我使用String[] str1 = str.split("[@]");将上面的字符串与“@”分开 这样最终的结果就是

str1[0] = test1|test2|test3

str1[1] = test4|test5|test6|test7

...

我用的代码sn-p

   for (int x = 1; x < str1.length; x++) {
    String[] st1 = str1 [x].trim().split("\\|");
    System.out.println("first" + st1[0].trim());
    System.out.println("second" + st1[1].trim());
    System.out.println("third" + st1[2].trim());
    System.out.println("fourth" + st1[3].trim());  

   List1.add(st1[0].trim());
   List2.add(st1[1].trim());
   List3.add(st1[2].trim());
   List4.add(st1[3].trim());

    }

在上面的 for 循环中,当循环从 x=2 开始时,它工作正常。但是如果我给 x=1 那么它就是抛出数组 “System.out.println("fourth" + st1[3].trim());”处的索引越界异常。是因为 str1[0] 仅包含 3 个项目,而其余项目包含 4 个项目。所以现在我无法在用“|”分割后得到第四个值。请告诉我如何获得第四个值。提前致谢。

【问题讨论】:

    标签: java android


    【解决方案1】:

    ArrayIndexOutOFBound 即将到来,因为您正在访问您可以通过以下两种方式获得的第四个值,

    String[] str1 = str.split("@");
            for (int x = 1; x < str1.length; x++) {
                String[] st1 = str1[x].trim().split("\\|");
                for (int j = 0; j < st1.length; j++) {
                    System.out.println(st1[j]);
    
                }
    
            }
    

    String[] str1 = str.split("@");
            for (int x = 1; x < str1.length; x++) {
                String[] st1 = str1[x].trim().split("\\|");
                /*for (int j = 0; j < st1.length; j++) {
                    System.out.println(st1[j]);
    
                }*/
                if(st1.length> 0 )
                    System.out.println("first" + st1[0].trim());
                if(st1.length> 1 )
                    System.out.println("second" + st1[1].trim());
                if(st1.length> 2 )
                    System.out.println("third" + st1[2].trim());
                if(st1.length> 3 )
                    System.out.println("fourth" + st1[3].trim());
    
            }
    

    【讨论】:

      【解决方案2】:

      你的字符串中有@,我在任何地方都看不到[@],那么你为什么要用这个令牌分割字符串。

      改变

      String[] str1 = str.split("[@]")
      

      String[] str1 = str.split("@")
      

      用于解决 indexOutOfBounds:

      for (int x = 1; x < str1.length; x++) {
        String[] st1 = str1 [x].trim().split("\\|");
        for (int j = 0; j < st1.length; j++)
        {
            System.out.println( j "= " + st1[j].trim());
        }
      
      }
      

      【讨论】:

        【解决方案3】:
        String str = "@test1|test2|test3@test4|test5|test6|test7@test8|test9|test10|test11@test12|test13|test14|test15@";
                String[] str1 = str.split("[@]");
        
                for (int x = 0; x < str1.length; x++) {
                    String[] str2 = str1[x].trim().split("\\|");
                    for (int y = 0; y < str2.length; y++) {
                        System.out.println(str2[y].trim());
                    }
                }
        

        输出:

        test1
        test2
        test3
        test4
        test5
        test6
        test7
        test8
        test9
        test10
        test11
        test12
        test13
        test14
        test15
        

        希望这会对你有所帮助。

        【讨论】:

          【解决方案4】:
          for (int x = 1; x < str1.length; x++) {
          String[] st1 = str1 [x].trim().split("\\|");
          System.out.println("first" + st1[0].trim());
          System.out.println("second" + st1[1].trim());
          System.out.println("third" + st1[2].trim());
          System.out.println("fourth" + st1[3].trim());
          
          }
          

          改为:

          for (int x = 0; x < str1.length; x++) {
          String[] st1 = str1 [x].trim().split("\\|");
          for (int y = 0; y < st1.length; y++)
          {
          System.out.println("value at "+String.ValueOf(y)+": " + st1[y].trim());
          }
          
          }
          

          【讨论】:

          • 嗨,它工作正常..谢谢..但是当我向 arraylist 添加单个值时,它在“List4.add(st1[3].trim( ));”。如何添加第四个值?
          • 你能告诉我你在哪个数组列表中得到异常的代码
          【解决方案5】:

          您有 IndexOutOfBoundException,因为第一个子字符串 (str1[0]) 只有 3 个项目,而您尝试访问第 4 个项目。这段代码 sn-p 应该可以工作。

          String[] str1 = str.split( "[@]" );
          List<String> list = new ArrayList<String>();
          for ( int x = 1; x < str1.length; x++ )
          {
              String[] st1 = str1[ x ].trim().split( "\\|" );
              for ( int index = 0; index < st1.length; index++ )
              {
                  String value = st1[ index ].trim();
                  System.out.println( "value in index " + index + "=" + value );
                  list.add( value );
              }
           }
          

          【讨论】:

            猜你喜欢
            • 2015-01-31
            • 2015-07-13
            • 2012-12-01
            • 1970-01-01
            • 2011-12-13
            • 1970-01-01
            • 1970-01-01
            • 2019-08-01
            • 2016-06-10
            相关资源
            最近更新 更多