子循环中的子串超出范围

时间:2017-01-29 23:19:25

标签: java for-loop indexoutofboundsexception

我正在编写一个简单的程序,打印出每个可能的密码组合,给出一组要使用的字符。密码必须是5个字符,所以我使用5个for循环来替换每个。出于某种原因,当我尝试替换字符4时,我总是得到一个超出范围的异常的String索引。我不确定为什么会这样。

代码

char[] charList = new char[]{'a','b','c','d','e','f'};
String password = "aaaaaa";
for (int char1 = 0; char1 < charList.length; char1++) {
    password = charList[char1] + password.substring(1, 4);
    for (int char2 = 0; char2 < charList.length; char2++) {
        password = password.substring(0) + charList[char2] + password.substring(2, 4);
        for (int char3 = 0; char3 < charList.length; char3++) {
            password = password.substring(0, 1) + charList[char3] + password.substring(3, 4);
            for (int char4 = 0; char4 < charList.length; char4++) {

                //java.lang.StringIndexOutOfBoundsException: String index out of range: -1 below
                password = password.substring(0, 2) + charList[char4] + password.substring(4);

                for (int char5 = 0; char5 < charList.length; char5++) {
                    password = password.substring(0, 3) + charList[char5];
                    System.out.println(password);
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

password = password.substring(0, 1) + charList[char3] + password.substring(3, 4);为密码分配长度为3的字符串。

然后你调用password.substring(4)试图访问字符串中不存在的索引!

答案 1 :(得分:0)

子串方法的最后一个索引是独占的,这意味着第4个caractère不被采用。你也从1开始,这意味着你的子串只有3个字符