如何修复StringIndexOutOfBoundsException?

时间:2016-03-18 16:15:23

标签: java encryption indexoutofboundsexception caesar-cipher

我一直试图让这段代码正常工作,但我不断收到StringIndexOutOfBoundsException错误。任何人都可以帮我找到解决这个问题的方法吗?我一直试图弄乱索引。第一个while循环单独运行很好,但是当我把第二个循环放进香蕉时。

public static String encrypt(int key, String name) {
        String encryptedName = "";
        int i = 0;

        while((int) name.charAt(i) > 64 && (int) name.charAt(i) < 91) {
            if((int)name.charAt(i) + key > 90 ) {
                encryptedName += (char) ((int) name.charAt(i) + key - 26); 
            } else {
                encryptedName += (char) ((int) name.charAt(i) + key);
            }

            i++;
        }

        i = 0;  

        while((int) name.charAt(i) > 96 && (int) name.charAt(i+1) < 123 && i < name.length() - 1) {
            System.out.println(i);
            i++;
            if((int)name.charAt(i) + key > 122) {
                encryptedName += (char) ((int) name.charAt(i) + key - 26);
            } else {
                encryptedName += (char) ((int) name.charAt(i) + key);
            }
        }

        return encryptedName;
    }
}

以下是我遇到的错误:

java.lang.StringIndexOutOfBoundsException: String index out of   range: 7
    at java.lang.String.charAt(String.java:658)
    at Cipher.encrypt(Cipher.java:61)
    at Cipher.main(Cipher.java:26)

2 个答案:

答案 0 :(得分:0)

你可能需要添加一个条件,以便在我变得太大之前突破循环。

E.g。

while (i < name.length() && ...)

并且对于第二个循环,添加

while (i + 1 < name.length && ...)

答案 1 :(得分:0)

在第二个while循环中,尝试将i ++移动到while循环的底部。