使用Java从文本文件中计算字数

时间:2018-11-26 20:08:26

标签: java

我正在尝试编写一个简单的代码,该代码将为我提供文本文件中的字数统计。代码如下:

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);
   }

}

此代码可编译,但未提供正确的字数。我在做什么错?

2 个答案:

答案 0 :(得分:2)

现在,如果您使用的字符是空格,而前面的字符不是空格,则仅增加wordCnt。但这打折了几种情况,例如如果没有空格,而是换行符。考虑一下您的文件是否是这样的:

This is a text file\n
with a bunch of\n
words. 

您的方法应返回10,但由于单词fileof之后没有空格,因此不会将它们视为单词。

如果您只是想要字数统计,则可以执行以下操作:

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);