我正在尝试编写一个简单的代码,该代码将为我提供文本文件中的字数统计。代码如下:
import java.io.File; //to read file
import java.util.Scanner;
public class ReadTextFile {
public static void main(String[] args) throws Exception {
String filename = "textfile.txt";
File f = new File (filename);
Scanner scan = new Scanner(f);
int wordCnt = 1;
while(scan.hasNextLine()) {
String text = scan.nextLine();
for (int i = 0; i < text.length(); i++) {
if(text.charAt(i) == ' ' && text.charAt(i-1) != ' ') {
wordCnt++;
}
}
}
System.out.println("Word count is " + wordCnt);
}
}
此代码可编译,但未提供正确的字数。我在做什么错?
答案 0 :(得分:2)
现在,如果您使用的字符是空格,而前面的字符不是空格,则仅增加wordCnt
。但这打折了几种情况,例如如果没有空格,而是换行符。考虑一下您的文件是否是这样的:
This is a text file\n
with a bunch of\n
words.
您的方法应返回10,但由于单词file
和of
之后没有空格,因此不会将它们视为单词。
如果您只是想要字数统计,则可以执行以下操作:
while(scan.hasNextLine()){
String text = scan.nextLine();
wordCnt+= text.split("\\s+").length;
}
哪个将在空白处分割,并返回结果Array
中的令牌数量
答案 1 :(得分:0)
首先,请记住有关关闭资源的信息。请检出this。
从Java 8开始,您可以通过这种方式对单词进行计数:
String regex = "\\s+"
String filename = "textfile.txt";
File f = new File (filename);
long wordCnt = 1;
try (var scanner = new Scanner (f)){
wordCnt scanner.lines().map(str -> str.split(regex)).count();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Word count is " + wordCnt);