java Java简单计算文件中的单词

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13854073/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 14:12:12  来源:igfitidea点击:

Java simple counting words in a file

java

提问by user1452463

I am creating a simple program that counts the number of words, lines and total characters (not including whitespace) in a paper. It is a very simple program. My file compiles but when I run it I get this error:

我正在创建一个简单的程序,用于计算论文中的字数、行数和总字符数(不包括空格)。这是一个非常简单的程序。我的文件编译但当我运行它时出现此错误:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:838)
    at java.util.Scanner.next(Scanner.java:1347)
    at WordCount.wordCounter(WordCount.java:30)
    at WordCount.main(WordCount.java:16)

Does anyone know why this is happening?

有谁知道为什么会这样?

 import java.util.*;
 import java.io.*;
 public class WordCount {
//throws the exception
public static void main(String[] args) throws FileNotFoundException {
    //calls on each counter method and prints each one
    System.out.println("Number of Words: " + wordCounter());
    System.out.println("Number of Lines: " + lineCounter());
    System.out.println("Number of Characters: " + charCounter());

}

//static method that counts words in the text file  
public static int wordCounter() throws FileNotFoundException { 
//inputs the text file
Scanner input = new Scanner(new File("words.txt")); 
    int countWords = 0;
    //while there are more lines
    while (input.hasNextLine()) {
        //goes to each next word
        String word = input.next();
        //counts each word
        countWords++;
    }
    return countWords;
}

//static method that counts lines in the text file  
public static int lineCounter() throws FileNotFoundException {
//inputs the text file
Scanner input2 = new Scanner(new File("words.txt"));
    int countLines = 0;
    //while there are more lines
    while (input2.hasNextLine()) {
        //casts each line as a string
        String line = input2.nextLine();
        //counts each line
        countLines++;
    }
    return countLines;
   }    

//static method that counts characters in the text file 
public static int charCounter() throws FileNotFoundException {
//inputs the text file
Scanner input3 = new Scanner(new File("words.txt"));
    int countChar = 0;
    int character = 0;
    //while there are more lines
    while(input3.hasNextLine()) {
       //casts each line as a string
        String line = input3.nextLine();
        //goes through each character of the line
        for(int i=0; i < line.length(); i++){
            character = line.charAt(i);
             //if character is not a space (gets rid of whitespace)
            if (character != 32){
                //counts each character
                countChar++;
            }
        }           
    }
   return countChar;
}
} 

采纳答案by Thihara

I can't really say the exact reason for the problem without looking at the file (Maybe even not then).

如果不查看文件,我无法真正说出问题的确切原因(也许那时甚至不会)。

   while (input.hasNextLine()) {
        //goes to each next word
        String word = input.next();
        //counts each word
        countWords++;
    }

Is your problem. If you are using the input.hasNextLine()in the while conditional statement use input.nextLine(). Since you are using input.next()you should use input.hasNext()in the while loops conditional statement.

是你的问题吗。如果您input.hasNextLine()在 while 条件语句中使用input.nextLine(). 由于您正在使用,input.next()您应该input.hasNext()在 while 循环条件语句中使用。

回答by Chaitanya

public static int wordCounter() throws FileNotFoundException 
{ 
    Scanner input = new Scanner(new File("words.txt")); 
    int countWords = 0;

    while (input.hasNextLine()) {

        if(input.hasNext()) {
            String word = input.next();
            countWords++;
        }
    }

    return countWords;
}

I have just added an ifcondition within the while loop. Just make sure to check there are token to be parsed. I have changed only in this place. Just make sure to change wherever needed.

我刚刚if在 while 循环中添加了一个条件。只需确保检查是否有要解析的令牌。我只在这个地方改变了。只要确保在需要的地方进行更改。

This linkwill give good info. in regard to that.

链接将提供很好的信息。在这方面。

Hope it was helpful. :)

希望它有帮助。:)