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

时间:2015-11-04 07:32:18

标签: java

我正在练习编写一个程序,该程序从用户处获取文本文件,并在文本中提供字符,单词和行等数据。

我搜索并查看了相同的主题,但无法找到让代码运行的方法。

public class Document{
private Scanner sc;

// Sets users input to a file name
public Document(String documentName) throws FileNotFoundException {
    File inputFile = new File(documentName);
    try {
        sc = new Scanner(inputFile);

    } catch (IOException exception) {
        System.out.println("File does not exists");
    }
}


public int getChar() {
    int Char= 0;

    while (sc.hasNextLine()) {
        String line = sc.nextLine();
        Char += line.length() + 1;

    }
    return Char;
}

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

    while (sc.hasNext()) {
        String line = sc.next();
        Words += new StringTokenizer(line, " ,").countTokens();

    }

    return Words;
}

public int getLines() {
    int Lines= 0;

    while (sc.hasNextLine()) {
        Lines++;
    }

    return Lines;
}
  }

主要方法:

public class Main {

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

        // outputs 1451, should be 1450
        System.out.println("Number of characters: "
            + doc.getChar()); 

        // outputs 0, should be 257
        System.out.println("Number of words: " + doc.getWords());
        // outputs 0, should be 49
        System.out.println("Number of lines: " + doc.getLines()); 

    }

}

我确切地知道为什么我得到1451而不是1451.原因是因为我没有' \ n'在最后一句结尾但我的方法补充说  numChars + = line.length()+ 1;

然而,我找不到解决为什么我得到0的单词和行。 *我的文本包含以下内容: , - '

毕竟,有人能帮助我做这项工作吗?

**到目前为止,我担心的问题是,如果最后一句话没有' \ n'元件。我有机会用if语句解决这个问题吗?

- 谢谢你!

2 个答案:

答案 0 :(得分:2)

getChar/Words/Lines之后,您已到达文件末尾。所以在这个文件中没有其他内容了!

您应该使用public int getChar() { sc = new Scanner(inputFile); ... // solving your problem with the last '\n' while (sc.hasNextLine()) { String line = sc.nextLine(); if (sc.hasNextLine()) Char += line.length() + 1; else Char += line.length(); } return char; } 方法重置扫描仪,例如:

\n

请注意,行结尾并不总是\r\n!它也可能是public int getWords() { sc = new Scanner(inputFile); ... public int getLines() { sc = new Scanner(inputFile); ... (特别是在windows下)!

{{1}}

答案 1 :(得分:1)

我会使用一次扫描来计算所有3个,具有不同的计数器。只是在每个char上循环,检查它是否是一个新单词等,增加计数,使用Charater.isWhiteSpace *

DifferenceMain()