【问题标题】:unable to start activity:StringIndexOutOfBoundsException: String index out of range: -2无法启动活动:StringIndexOutOfBoundsException:字符串索引超出范围:-2
【发布时间】:2019-05-08 22:11:15
【问题描述】:

我正在从表中检索数据并将其显示在 textview 中,我已经使用 breakString() 方法破坏了字符串,但在最后两个数据是 starcast 和 director 中,它显示 StringIndexOutOfBoundsException... 因为我已经调试了应用程序数据仍然在字符串中,但是当它到达starcast时调试停止......

breakString() 方法

   public void breakString(String str)
    {
        name=str.substring(1,str.indexOf(","));
        str= str.substring( name.length()+2, str.length(  ) );

        genre=str.substring(0,str.indexOf(","));
        str= str.substring( genre.length()+1, str.length(  ) );

        year=str.substring(0,str.indexOf(","));
        str= str.substring( year.length()+1, str.length(  ) );

        duration=str.substring(0,str.indexOf(","));
        str= str.substring( duration.length()+1, str.length(  ) );

        String str1 = str.substring(0,str.indexOf(","));
        rating=Double.valueOf(str1);

        str = str.substring( str1.length()+1, str.length() );
        review = str.substring(0,str.indexOf( "," ));
        str=str.substring(review.length()+1,str.indexOf(","));

        starcast = str.substring( 0, str.indexOf( "," ));
        str = str.substring( starcast.length()+1, str.indexOf(","));
       // str = str1.substring( starcast.length()+1, str.length()-1 );

        director = str;

    }

调试模式图片

enter image description here

enter image description here

enter image description here

在此之后调试停止并且没有生成任何内容。

【问题讨论】:

  • 你从来没有向我们展示过这个字符串是什么。不清楚你在问什么。
  • 先了解字符串模式,然后你就可以轻松地使用正则表达式破解字符串。
  • 字符串显示在调试图像中
  • 字符串是[电影名,传记,2018,250,5,我从最近几个月开始的,ron,tim]

标签: android substring indexoutofboundsexception string-function


【解决方案1】:

更新

你的问题在下面一行:

 str=str.substring(review.length()+1,str.indexOf(",")) //Original
 str=str.substring(review.length()+1,str.length()); // Should be

程序崩溃,因为review的长度是45,indexOf逗号是44。

【讨论】:

  • @YashDadhaniya - 在 Tim 之后的字符串末尾没有逗号,您想要检索它。我可以看到“罗恩,蒂姆”。
  • 字符串是[电影名,传记,2018,250,5,我从最近几个月开始的,ron,tim]
  • 是的,但我想检索未发生的 str 变量中的 ron
  • 然后是 tim ... 所以对于 tim 我写了 director = str
  • 调试器甚至没有到达最后三行,即使我在 str 变量中有值 [ron, tim]
【解决方案2】:

经过简单的单元测试:

str = str.substring(review.length()+1, str.length());
...
str = str.substring(starcast.length()+1, str.length());

不过,我强烈推荐StringTokenizer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多