当前位置: 首页 > 知识库问答 >
问题:

在android中拆分字符串时获取数组索引超出边界

巫马令
2023-03-14

我正在Android上工作。我有一个如下所示的字符串。

字符串str=“@test1 | test2|test3@test4|测试5 |测试6|test7@test8|测试9 |测试10|test11@test12|测试13 |测试14|test15@......“

我正在使用字符串[]str1=str.split([@])将上述字符串拆分为“@” 以便最终结果

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

str[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项组成。所以现在我无法得到用“|”拆分后的第四个值。请告诉我如何得到第四个值。提前谢谢。

共有3个答案

闻人和歌
2023-03-14
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

希望这对你有帮助。

欧阳晗日
2023-03-14

你的字符串中有@我在任何地方都看不到,那么你为什么要用这个标记拆分字符串呢。

改变

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

}
陈兴朝
2023-03-14

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

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

        }
 类似资料:
  • 问题内容: 因此,我正在编写一个简单的程序来输入字符串并计算总数。的米 所以,这是我的代码 where 和str是我接受过的字符串,但是此错误不断出现 这是什么错误以及如何将其删除? 问题答案: 字符串,有效索引从0到n-1; 更改 至

  • 我试图在Java解决这个问题。我有一个很长的信息字符串,我想根据给定字段的长度拆分字符串。 示例:` FirstNameLastName yy-mm-dd549Eastwolframstreet 我有一个字段列表及其长度。有n个字段。示例字段: FirstName长度:9 姓氏长度:9 日期长度:8 地址:30 如果名称少于9个字符,则空格将占据其余位置。i、 e Lastname的长度为9,但只

  • 问题内容: 我有一个名为的字符串,其形式像这样 。 我想使用:分隔符。 这样一来,单词将被拆分成自己的字符串,并将成为另一个字符串。 然后我只想使用2种不同的字符串来显示该字符串。 解决这个问题的最佳方法是什么? 问题答案: 你可能要删除第二个字符串的空格: 如果要用特殊字符(例如dot(。))分割字符串,则应在点之前使用转义字符\ 例: 还有其他方法可以做到这一点。例如,你可以使用类(来自):

  • 假设我有一个包含“abc”“xyz”“123”的长字符串,我想把它拆分为[“abc”,“xyz”,“123”]如何?谢谢

  • 问题内容: 我正在尝试找到一种将String拆分为String数组的方法,并且每当遇到白色香料时就需要对其进行拆分,例如 “嗨,我是保罗” 进入” “嗨”“我”“保罗” 如何使用RegularExpression在split()方法中表示空格? 问题答案: 您需要一个正则表达式,例如,这意味着: 每当遇到至少一个空格时就进行拆分 。完整的Java代码是:

  • 问题内容: 我猜我正在收到此错误,因为字符串正在尝试对值进行子字符串化。但是那部分不能消除这个问题吗? 这是Java代码段: 我收到此错误: 问题答案: 我猜我正在收到此错误,因为字符串试图将Null值作为子字符串。但是“ .length()> 0”部分不能消除该问题吗? 不,在itemdescription为null时调用itemdescription.length()不会生成StringInd