java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:14

时间:2015-12-30 01:28:08

标签: java

为什么我使用此代码获取索引问题的字符串。 我已经花了很多时间来摆脱这个,但我无法解决。

我想从给定字符的给定字符串中打印最大子字符串和最小子字符串。

scala> trait Reversed
defined trait Reversed

scala> def cv(s: String): String with Reversed =
     | s.reverse.asInstanceOf[String with Reversed]
cv: (s: String)String with Reversed

scala> implicit def cv(s: String): String with Reversed =
     | s.reverse.asInstanceOf[String with Reversed]
warning: there was one feature warning; re-run with -feature for details
cv: (s: String)String with Reversed

scala> val r: String with Reversed = "hi"
r: String with Reversed = ih

3 个答案:

答案 0 :(得分:3)

问题出在这里

for(i=0;i<=length;i++)

如果你有一个n个字符的字符串,这一行将循环到并包括索引n。那不是你想要的。因为你从零开始。实际上你想循环到n-1。

所以你最好把它改成:

for(i=0 ; i < length; i++)

希望这是有道理的。

PS。我不确定其余代码是否正常,但这一行肯定会导致IOOB异常。

答案 1 :(得分:0)

确保您正在致电

in.Close(); 

完成后使用它。同样如上所述,要警惕越界

for(i=0;i<=length;i++)

另一件需要注意的是,此变量未被使用

int y = str2.compareTo(str3);

请注意未使用的进口产品。

答案 2 :(得分:0)

首先改变:

str1=str.substring(0,a); 
str2=str.substring(0,a);

为:

if(a <length){
 str1=str.substring(0,a); 
 str2=str.substring(0,a);
}

并从

更改for循环
for(i=0;i<=length;i++)

到:

for(i=0; i < length-a ; i++)