count characters, words and lines in file

后端 未结 8 1721
离开以前
离开以前 2020-12-18 16:47

This should count number of lines, words and characters into file.

But it doesn\'t work. From output it shows only 0.

Code:

8条回答
  •  有刺的猬
    2020-12-18 17:43

    You have a couple of issues in here.

    First is the test for the end of line is going to cause problems since it usually isn't a single character denoting end of line. Read http://en.wikipedia.org/wiki/End-of-line for more detail on this issue.

    The whitespace character between words can be more than just the ASCII 32 (space) value. Consider tabs as one case. You want to check for Character.isWhitespace() more than likely.

    You could also solve the end of line issues with two scanners found in How to check the end of line using Scanner?

    Here is a quick hack on the code you provided along with input and output.

    import java.io.*;
    import java.util.Scanner;
    import javax.swing.JFileChooser;
    
    public final class TextApp {
    
    public static void main(String[] args) throws IOException {
        //counters
        int charsCount = 0;
        int wordsCount = 0;
        int linesCount = 0;
    
        Scanner fileScanner = null;
        File selectedFile = null;
        JFileChooser chooser = new JFileChooser();
        // choose file 
        if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
            selectedFile = chooser.getSelectedFile();
            fileScanner = new Scanner(selectedFile);         
        }
    
        while (fileScanner.hasNextLine()) {
          linesCount++;
          String line = fileScanner.nextLine();
          Scanner lineScanner = new Scanner(line);
          // count the characters of the file till the end
          while(lineScanner.hasNext()) {
            wordsCount++;
            String word = lineScanner.next();
            charsCount += word.length();
          } 
    
        lineScanner.close();
      }
    
      //display the count of characters, words, and lines
      System.out.println("# of chars: " + charsCount);
      System.out.println("# of words: " + wordsCount);
      System.out.println("# of lines: " + linesCount);
    
      fileScanner.close();
     }
    }
    

    Here is the test file input:

    $ cat ../test.txt 
    test text goes here
    and here
    

    Here is the output:

    $ javac TextApp.java
    $ java TextApp 
    # of chars: 23
    # of words: 6
    # of lines: 2
    $ wc test.txt 
     2  6 29 test.txt
    

    The difference between character count is due to not counting whitespace characters which appears to be what you were trying to do in the original code.

    I hope that helps out.

提交回复
热议问题