【发布时间】:2021-07-08 01:37:09
【问题描述】:
我是 Java 新手。我正在尝试读取一个文本文件并将它的变量存储到一个字符数组中,然后对其应用凯撒密码加密。但是我得到 ejava.lang.StringIndexOutOfBoundsException: String index out of range: 4 on the line that say if (str.charAt(i) == str.charAt(j)) 如果有人可以提供帮助,那就太好了!
问题已解决*
public void passwordCaesaCipher() throws Exception {
String str;
int size = 0;
char[] string1 = {};
File f = new File("password.txt");
BufferedReader br = new BufferedReader(new FileReader(f));
String lowercase = "abcdefghijklmnopqrstuvwxyz";
while ((str = br.readLine()) != null) {
System.out.println(str);
string1 = str.toCharArray();
size = str.length();
System.out.println(size);
System.out.println(string1);
for (int i = 0; i < size; i++) {
for (int j = 0; j < 26; j++) {
if (str.charAt(i) == lowercase.charAt(j)) {
System.out.print(str.charAt((j) % 26));
}
else
{
}
}
}
System.out.println();
}
}
我的文本文件有“abc”,我希望它是“bcd”。但是,通过我的实现,我得到了 abc。
【问题讨论】:
-
字符串的最大长度是多少?真的是 26 个字符吗?
-
@albertjtan 没有限制。但是我把它设置为 26 因为我想执行模 26 运算,因为有 26 个字母。
-
但是为什么 str.charAt(j) 呢?它不应该是一个字母列表吗?如果您使用 str,它将再次循环您的字符串,可能小于 26
-
感谢您的帮助!我正在将字母列表与字符串进行比较,从我的文本文件中获取。
-
@albertjtan 我刚刚做了 `System.out.print(lowercase.charAt((j) % 26));` 它修复了你提到的错误,但我的加密不起作用。你有什么建议吗?
标签: java arrays char bufferedreader