【问题标题】:java.lang.StringIndexOutOfBoundsException [closed]java.lang.StringIndexOutOfBoundsException [关闭]
【发布时间】:2013-04-06 07:28:23
【问题描述】:

代码:

for(int i = 0; i < rate.length; i++){
                if(i == 0 | i == 4 | i == 8 | i == 12 | i == 18 | i == 22 | i == 26 | 
                        i == 30 | i == 34){
                    System.out.println(rate[i]);
                    String parsedRate = rate[i].substring(0, 5);
                    System.out.println(parsedRate);
                    double rt = Double.parseDouble(parsedRate);
                    if(rt > max){
                        max = rt;
                    }
                }
            }

输出:

10.00% 10.00

线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:5 在 java.lang.String.substring(String.java:1907) 在 parserTax.main(parserTax.java:48)

我得到了想要的 10.00...但它失败了。这是一个错误吗?我知道它与那个特殊字符 '%' 有关系...我正在尝试解析一个文件以进行分析,有人可以帮我吗?

【问题讨论】:

  • 我明白错误的含义......我想知道为什么当'%'字符存在时我仍然收到错误
  • 小提示:可以将if(i == 0 | i == 4 | i == 8 | i == 12 | i == 18 | i == 22 | i == 26 | i == 30 | i == 34){替换为if(i%4 == 0 &amp;&amp; i&gt;=0 &amp;&amp; i&lt;=34)

标签: java file parsing substring


【解决方案1】:

很可能错误在这一行。-

String parsedRate = rate[i].substring(0, 5);

您正在尝试从位置 0 到 5 获取从 rate[i] 的子字符串。您是否检查过所有 rate 字符串至少包含 6 个字符?请记住输出,似乎在第二次 if 条件为真 (i == 4) 时引发了异常,因此 rate[4] 可能包含一个空字符串。

【讨论】:

  • 第一个 rate[i] 是 10.00% 第二个输出显示解析的 rate[i],但随后失败
  • 哈哈等等,我想我明白你的意思了.... 天哪,谢谢你,我要去试试
  • 我猜 rate[1] 包含 10.00,只有 5 个字符 :)
  • System.out.println(rate[i]); String parsedRate = rate[i].substring(0, rate[i].indexOf("%")); System.out.println(parsedRate);双 rt = Double.parseDouble(parsedRate);如果(rt > max){ max = rt; }
  • 它包含 10.00% 我解析它,最终结果是 10.00 但是我在第二个 println 上方的行上得到一个错误
猜你喜欢
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 2014-01-07
  • 2012-01-12
  • 2013-01-16
  • 2017-03-10
相关资源
最近更新 更多