java - 我的输出假设整个文件是一行

标签 java

public static void main(String args[]) throws FileNotFoundException
{       
    String inputFileName = "textfile.txt";

    printFileStats(inputFileName);
}
public static void printFileStats(String fileName) throws FileNotFoundException
{
    String outputFileName = "outputtextfile.txt";
    File inputFile = new File(fileName);
    Scanner in = new Scanner(inputFile);
    PrintWriter out = new PrintWriter(outputFileName);

    int lines = 0;
    int words = 0;
    int characters = 0;

    while(in.hasNextLine())
    {               
        lines++;    
        while(in.hasNext())
        {
            in.next();
            words++;
        }   
    }

    out.println("Lines: " + lines);
    out.println("Words: " + words);
    out.println("Characters: " + characters);

    in.close();
    out.close();

}

我有一个包含五行的文本文件

this is  
a text  
file  
full of stuff  
and lines  

代码创建一个输出文件

Lines: 1  
Words: 10 
Characters: 0

但是,如果我删除了读取文件中字数的功能,它会正确显示行数 (5)。为什么会这样?

最佳答案

您的内部 while 循环正在吞噬整个文件。你想计算每一行的单词数,对吧?试试这个:

while (in.hasNextLine())
{               
    lines++;    
    String line = in.nextLine();
    for (String word : line.split("\\s")) 
    {
        words++;
    }   
}

请注意,按空格拆分是一种非常幼稚的标记化方法(单词拆分),并且仅适用于简单示例,例如您在此处提供的示例。

当然,您也可以执行 words += line.split("\\s").length; 而不是内部循环。

关于java - 我的输出假设整个文件是一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19554725/

相关文章:

java - 仅显示 float 的小数

java - 通过 lambda 表达式调用 System.out.println()

java - Single HQL 中的最小主键和主键

java - Date 对象序列化中的奇怪行为

java - 从 playstore 安装后应用程序图标更改为默认图标

Java JIT 编译器导致 OutOfMemoryError

java - NER CRF,线程 "main"java.lang.NoClassDefFoundError : org/slf4j/LoggerFactory 中出现异常

java - Datasnapshot 未从 Firebase 返回正确的数据

java - 如何读取上传后的大尺寸Excel文件

java - 为什么服务器程序不退出?