从 txt 文件中读取一个 String 并将其存储到 java 中的 char 数组中
Read a String from a txt file and store it into a char array in java
我是 java 的新手。我正在尝试读取一个文本文件并将变量按 char 存储到数组 char 中,然后对其应用 Caesar Cipher 加密。但是我得到 ejava.lang.StringIndexOutOfBoundsException: String index out of range: 4 在上面写着 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。
您可能需要检查第 2 个 for 循环的长度,即 26。当您从文件中读取的字符串长度小于 26 时,总是会导致索引超出范围。
编辑第二个循环帮助我获得了正确答案。我忘了给 System.out.print(lowercase.charAt((j) % 26));
添加 +1。因为它只是打印自己。正确的解法是: System.out.print(lowercase.charAt((j+1) % 26));
我是 java 的新手。我正在尝试读取一个文本文件并将变量按 char 存储到数组 char 中,然后对其应用 Caesar Cipher 加密。但是我得到 ejava.lang.StringIndexOutOfBoundsException: String index out of range: 4 在上面写着 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。
您可能需要检查第 2 个 for 循环的长度,即 26。当您从文件中读取的字符串长度小于 26 时,总是会导致索引超出范围。
编辑第二个循环帮助我获得了正确答案。我忘了给 System.out.print(lowercase.charAt((j) % 26));
添加 +1。因为它只是打印自己。正确的解法是: System.out.print(lowercase.charAt((j+1) % 26));