用于计算文本文件中的字符,单词和行的Java程序

时间:2015-11-04 02:04:38

标签: java

我正在尝试编写一个程序,以一种类似于文字处理器的方式收集文本文件的统​​计信息,这些文字处理器会告诉您已经写了多少字符,单词和行。

此程序的目的是向用户询问文件名称(使用扫描仪)并输出统计信息。

这是我到目前为止所做的:

public class DocStats {
private File inputFile;
private Scanner in;

// Sets users input (string attribute) to a file name
public DocStats(String string) throws FileNotFoundException {
    try {
        File inputFile = new File(string);
        Scanner in = new Scanner(inputFile);

        this.inputFile = inputFile;
        this.in = in;
    } catch (IOException exception) {
        System.out.println("Could not open the file");
    }
}

// Gets the number of characters in a text
public int getNumberOfCharacters() {
    int numChar = 0;

    while (in.hasNext()) {
        String line = in.nextLine();
        numChar += line.length();
    }

    return numChar;
}

// Gets the number of words in a text
public int getNumberOfWords() {
    int numWords = 0;

    while (in.hasNextLine()) {
        String line = in.nextLine();
        numWords += new StringTokenizer(line, " ,").countTokens();
    }

    return numWords;
}

// Gets the number of lines in a text
public int getNumberOfLines() {
    int numLines = 0;
    while (in.hasNextLine()) {
        numLines++;
    }
    return numLines;
}
}

在主方法中测试我的课后,我得不到正确的输出。这是主要方法:

import java.io.*;

public class Main {

public static void main(String[] args) throws FileNotFoundException {
    DocStats doc = new DocStats("goblin.txt");

    System.out.println("Number of characters: "
            + doc.getNumberOfCharacters()); // outputs 1402, instead of 1450

    System.out.println("Number of words: " + doc.getNumberOfWords()); // outputs
                                                                        // 0
                                                                        // instead
                                                                        // of
                                                                        // 257
    System.out.println("Number of lines: " + doc.getNumberOfLines()); // outputs
                                                                        // 0
                                                                        // instead
                                                                        // of
                                                                        // 49
}
}

有人能指出为什么我的代码不起作用并建议任何其他方法来修复它吗?

2 个答案:

答案 0 :(得分:0)

您正在使用getNumberOfCharacters()方法扫描文件,这就是它非零的原因。其他是0,因为扫描仪位于文件的末尾。

您需要将DocStats类更改为只有一个循环

GET http://myhost:8000/api/v1.0/users/[user_id]

答案 1 :(得分:-2)

因此,您需要做的是消除公共DocStats()中的while循环之外的所有while循环

在公共DocStats中,您放置了Clayton Wilkinson创建的while循环。

public int getNumberOfCharacters() {

        return characterCount;

    }

    /**
     * 
     * 
     * 
     * @return wordCount
     * 
     */

    public int getNumberOfWords() {

        return wordCount;

    }

    /**
     * 
     * 
     * 
     * @return lineCount
     * 
     */

    public int getNumberOfLines() {

        return lineCount;

    }