我需要帮助理解java.lang.StringIndexOutOfBoundsException

时间:2015-02-11 06:31:50

标签: java android

我为caesar密码编写了代码,但它不起作用...请帮我解决这个问题。

import java.io.IOException;
import java.util.Scanner;

public class test1 {

    public static void main(String[] args) throws IOException {
        System.out.println("enter the String");
        StringBuffer str = new StringBuffer(new Scanner(System.in).nextLine());
        System.out.println("encrypting the String . . ." +str);

        for(int j=0; j<str.length(); j++){
            for(int i=0; i<256; i++) {
                if((char)i == str.charAt(j)){
                    str.setCharAt(j, (char)(i+3));
                }
            }
        }
        System.out.println("encrypted String . . .");
    }
}

此处您的解决方案正常运行,不再有java.lang.StringIndexOutOfBoundsException 现在又出现了另一个问题。 。 。 。 我尝试了不同的输入,但总是回复相同的答案:??????

4 个答案:

答案 0 :(得分:1)

java中的字符串是基于零的。因此,您必须删除第一个循环中的=

for(int j=0; j<str.length(); j++){

答案 1 :(得分:1)

使用for(int j=0; j<str.length(); j++) // string index length are 0 based

而不是

for(int j=0; j<=str.length(); j++)

答案 2 :(得分:1)

字符串的字符始终以索引0开头,这意味着如果存储

String str="text";

然后

str.charAt(0) // return "t"
str.charAt(1) // return "e"
str.charAt(2) // return "x"
str.charAt(3) // return "t"

如果你致电str.charAt(4)

  

它会抛出java.lang.StringIndexOutOfBoundsException,意思是,   您要从中获取数据的索引超出范围。

所以只需按照每个人的建议改变你的for循环。 像这样,

        for(int j=0; j<str.length(); j++){
            for(int i=0; i<256; i++) {
                if((char)i == str.charAt(j)){
                    str.setCharAt(j, (char)(i+3));
                }
            }
        }

答案 3 :(得分:0)

j<= str.length() to j< str.length()中使用for(int j=0; j<str.length(); j++)作为索引从0开始