Java:如何从文本文件中获取每行中的第一个单词并将其写入新的文本文件?

时间:2018-04-05 03:35:49

标签: java exception-handling try-catch throws

我的教授发布了这个来练习异常处理和读写文本文件:

编写一个名为removeFirstWord

的方法

removeFirstWord返回一个int并将两个字符串作为参数。

第一个参数是输入文件的名称,第二个参数是名称 输出文件。

它将输入文件作为文本文件一行读取一行。它从每一行中删除了第一个单词,并将结果行写入输出文件。下面的 sometext.txt 是一个示例输入文件, output.txt 是预期的输出文件。

如果输入文件不存在,则该方法应抛出FileNotFoundException。如果输入文件为空,则该方法应抛出EmptyFileException。该方法不应抛出任何其他异常。

如果抛出除FileNotFoundException以外的异常,则该方法应返回-1。否则,该方法返回0。"

这是他的代码:

    public static int removeFirstWord(String inputFilename, String outputFilename) throws FileNotFoundException, EmptyFileException {
    int lineCounter = 0;
    try {
        BufferedReader input = new BufferedReader(new FileReader(inputFilename));
        PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(outputFilename)));
        String line = input.readLine();
        while (line!=null){
            lineCounter++;
            String[] words = line.split(" ");
            for (int index = 1; index < words.length; index++) {
                String word = words[index];
                writer.print(word + " ");
            }
            writer.println();
            line = input.readLine();
        }
        writer.flush();
        writer.close();
        input.close();
    } catch (IOException ioe) {
        return -1;
    }

    if (lineCounter == 0) {
        throw new EmptyFileException();
    }
    return 0;   
}

我不明白她为什么使用阵列。你不能只读第一个单词并停在空格处并将该单词写入输出文件并跳转到下一行吗? 另外,我不理解投掷FileNotFoundExceptionEmptyFileException与仅执行投注之间的区别?

1 个答案:

答案 0 :(得分:0)

第一件事首先 - 实际上,你对她的要求有点困惑。实际上,她只想从给定的文本文件中删除所有行的所有第一个单词,并且输出文件中将保留单词。 因此,为此,她选择将完整的行转换为String数组。另一种可能的方法是对给定的行进行子串,但这在时间复杂度上会很昂贵。

第二个为什么她使用throws而不是catch块,因为根据业务需求,没有用来捕获这两个异常,她想稍后捕获它或者想要向最终用户显示它。

我认为这会帮助你。