线程主java.lang.StringIndexOutOfBoundsException中的异常

时间:2014-01-12 13:59:33

标签: java indexoutofboundsexception

我对Java很陌生,而且做完作业我做了这个练习:

  

编写一个java程序,它可以从键盘上取一个单词并将其显示为("hello" --> "olleh")

这就是我编写程序的方式

import java.util.*;
import java.lang.*;
public class Inverti {
     public static void main(String[] args) {
     System.out.println("digiti una parola o una frase, essa sara' stampata a video alla              rovescia");
     Scanner tastiera = new Scanner(System.in);
     String invertire = tastiera.nextLine();
     for (int i = 0; i < invertire.length();) {
     invertire.replace(invertire.charAt(i), invertire.charAt(invertire.length() - i));
     i++;
         }
System.out.print(invertire);
}
}

(我是意大利人,所以请注意“tastiera”的意思是“键盘”和“digiti una parola o una frase,essaaràtampataaa video alla rovescia”的意思是“输入一个单词,它将显示为反转”)< / p>

程序被编译,但之后,在输入单词:

之后
exception in thread main java.lang.stringindexoutofboundsexception: string 
    index out of bounds: 6 (if string.length() is 6) or 5 (if string.length() = 5).

我在发帖前寻找其他类似问题的答案,但没有任何帮助,对不起,如果问题的格式可能不对。

2 个答案:

答案 0 :(得分:1)

如果您的线长度为6,则表示可能性范围为[0,5] 然后,如果我们将i设为0,将invertire设为6将获得以下评估:

invertire.charAt(6 - 0)

结果当然是invertire.charAt(6)未出现在范围内,而且是导致异常的原因。

修正:

invertire.charAt(invertire.length() - i - 1)

答案 1 :(得分:0)

我会做这样的事情:

Scanner tastiera = new Scanner(System.in);
String input = tastiera.nextLine();
StringBuilder inverse = new StringBuilder();
for (int i = 0; i < input.length();i++) {
inverse.append(input.charAt(input.length()-1-i));
}
System.out.print(inverse);