java - Java - 计算文件中的单词、行和字符
问题描述
我正在尝试从文件中读取单词。我需要计算文本文件中的单词、行和字符。字数应仅包括单词(仅包含字母,不包含标点符号、空格或非字母字符)。字符数应仅包括这些单词中的字符。
这就是我到目前为止所拥有的。我不确定如何计算字符数。每次我运行程序时,只要我输入文件名,它就会跳转到 catch 机制(文件路径应该没有问题,因为我之前尝试过使用它)。我试图在没有 try/catch 的情况下创建程序以查看错误是什么,但没有它就无法工作。
为什么输入文件名会跳转到catch函数?如何修复此程序以正确计算文本文件中的单词、行和字符?
解决方案
如果我提供正确的文件名,您的代码不会有任何异常。至于读取字符数,你应该稍微修改一下逻辑。与其直接连接字数,不如创建一个新实例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.Matcher
matcher.find()