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 番目の値を取得できません。4番目の値を取得する方法を教えてください。前もって感謝します。

4

5 に答える 5

3

次の 2 つの方法で取得できる 4 番目の値にアクセスしているため、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

最初の部分文字列 (str1[0]) には 3 つの項目しかなく、4 番目の項目にアクセスしようとしたため、IndexOutOfBoundException が発生しました。このコード スニペットは機能するはずです。

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 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

あなた@の文字列には[@]どこにも表示されないので、なぜこのトークンで文字列を分割するのですか。

変化する

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 に答える