【问题标题】:Read a String from a txt file and store it into a char array in java从 txt 文件中读取字符串并将其存储到 java 中的 char 数组中
【发布时间】: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


【解决方案1】:

您可能需要检查第二个 for 循环的长度,即 26。当您从文件中读取的字符串长度小于 26 时,总是会导致索引超出范围。

【讨论】:

  • 我把它设为 26 是因为我想执行模 26 运算,因为有 26 个字母。
  • 只需声明另一个包含所有字母的字符串,并将其与第二个 for 循环一起使用。
  • 好的,它解决了错误,但我的加密仍然不起作用。你有什么建议吗?
  • 请编辑您的问题,了解当前实现的输出是什么以及您想要实现什么。
  • 刚才给您带来的不便很抱歉
【解决方案2】:

编辑第二个循环帮助我获得了正确答案。我忘了给System.out.print(lowercase.charAt((j) % 26)); 添加+1。正因为如此,它只是打印本身。正确的解决方案是: System.out.print(lowercase.charAt((j+1) % 26));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 2020-05-25
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    相关资源
    最近更新 更多