首页 > 解决方案 > Java - 计算文件中的单词、行和字符

问题描述

我正在尝试从文件中读取单词。我需要计算文本文件中的单词、行和字符。字数应仅包括单词(仅包含字母,不包含标点符号、空格或非字母字符)。字符数应仅包括这些单词中的字符。

这就是我到目前为止所拥有的。我不确定如何计算字符数。每次我运行程序时,只要我输入文件名,它就会跳转到 catch 机制(文件路径应该没有问题,因为我之前尝试过使用它)。我试图在没有 try/catch 的情况下创建程序以查看错误是什么,但没有它就无法工作。

为什么输入文件名会跳转到catch函数?如何修复此程序以正确计算文本文件中的单词、行和字符?

标签: javajava.util.scannerstringtokenizer

解决方案


如果我提供正确的文件名,您的代码不会有任何异常。至于读取字符数,你应该稍微修改一下逻辑。与其直接连接字数,不如创建一个新实例StringTokenizer st = new StringTokenizer(tempo, "[ .,:;()?!]+");并遍历所有标记,并对每个标记的长度求和。这应该给你字符数。像下面的东西

while (fileScan.hasNextLine()) {
            lineC++;
            tempo = fileScan.nextLine();
            StringTokenizer st = new StringTokenizer(tempo, "[ .,:;()?!]+");
            wordC += st.countTokens();
            while(st.hasMoreTokens()) {
                String stt = st.nextToken();
                System.out.println(stt); // Displaying string to confirm that like is splitted as I expect it to be
                charC += stt.length();
            }
            System.out.println("Lines: " + lineC + "\nWords: " + wordC+" \nChars: "+charC);
        }

注意:转义字符StringTokenizer不起作用。即你会期望它\\s应该用任何空白字符来分隔,但它会根据文字字符来分隔s。如果你想转义一个字符,我建议你使用 andjava.util.Pattern来识别单词和字符java.util.Matchermatcher.find()


推荐阅读