3

我正在研究安卓。我有一个如下所示的字符串。

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

我用“@”分割上面的字符串,String[] str1 = str.split("[@]"); 以便最终结果是

str1[0] = 测试1|测试2|测试3

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

...

我使用的代码片段

   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 个项目。所以现在我无法在用“|”分割后得到第四个值。请告诉我如何获得第四个值。提前致谢。

4

5 回答 5

3

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());

        }
于 2013-08-12T05:25:10.987 回答
0
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

希望这会帮助你。

于 2013-08-12T05:32:42.403 回答
0

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

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 );
    }
 }
于 2013-08-12T18:18:50.287 回答
0

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

改变

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());
  }

}
于 2013-08-12T05:15:05.513 回答
0
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());
}

}
于 2013-08-12T05:16:55.767 回答