java - 在java中输出文本文件的CaesarCipher程序

标签 java caesar-cipher

我正在尝试构建一个接受文本文件的程序,应用 CaesarCipher 方法并返回和输出文件。

import java.util.*;
import java.io.*;

class CaesarCipher
{
    public static void main (String [] args) throws FileNotFoundException {
        System.out.print("What is the input file name? ");
        Scanner keyboard = new Scanner(System.in);
        String fileName = keyboard.nextLine();
        Scanner inputFile = new Scanner (new File (fileName));
        String inputFileString = inputFile.toString();
        System.out.print("What is the input file name? ");
        int s = 4;
        System.out.println("Text  : " + inputFileString);
        System.out.println("Shift : " + s);
        System.out.println("Cipher: " + encrypt(inputFileString, s));
    }

    public static String encrypt(String inputFileString, int s) {
        StringBuilder result = new StringBuilder();

        for (int i=0; i< inputFileString.length(); i++) {
            if (Character.isUpperCase(inputFileString.charAt(i))) {
                char ch = (char)(((int)inputFileString.charAt(i) + s - 65) % 26 + 65);
                result.append(ch);
            }
            else {
                char ch = (char)(((int)inputFileString.charAt(i) + s - 97) % 26 + 97);
                result.append(ch);
            }
        }

        return result.toString();
    }
}

我有两个问题: 1- 程序正在编译,但是当我运行它并输入文本文件名时,出现此错误:

What is the input file name? Text : java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false][need input=false][source closed=false][skipped=false][group separator=\,][decimal separator=.][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q�\E][infinity string=\Q∞\E]

2- 如何构建包含编码文本的新输出文件?

最佳答案

您现有的代码不会实际将输入文件读入 String .您可以使用多种方法来做到这一点,其中之一是 Files.readAllLines(Path) ,它返回一个 List<String>的文件行。流式传输,并使用行分隔符收集它。喜欢,

String inputFileString = Files.readAllLines(new File(fileName).toPath()).stream()
            .collect(Collectors.joining(System.lineSeparator()));

至于写入文件,看看 PrintStream(File) 构造函数。

关于java - 在java中输出文本文件的CaesarCipher程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55213659/

相关文章:

java - 将语句括在 try catch block 中; eclipse和netbeans的区别

java - 如何解码字符串化的unicode?

java - 在哪里使用方法 onItemSelected

java - 如何编写java方法(如果String x = to String y返回String z)

c++ - 绝对值未在 ascii 中正确添加

c++ - 如果语句不工作,输入无法识别(C++)

python - 检查无效输入

Java 标识符中的变量类型

java - 为什么我会收到 org.hibernate.PropertyAccessException?

python - 如何解决 Python 中凯撒代码的问题