从文本文件中计算空格以查找其字数

时间:2014-12-07 19:34:24

标签: java if-statement while-loop

我想创建一个从具有多行单词的文本文件中读取的应用程序。 它将通过计算单词之间的空格数并添加校正因子来输出wordcount。

我不确定使用哪种输入方法来执行此操作。 我的输出与当前代码不正确。它不会计算第一个之后的单词,也不计算空格。

我该如何解决?

public static void main(String[] args) throws IOException {

    Scanner in = new Scanner(new FileReader( "/input5.txt"));//file read


    System.out.println("Echo print of the input file is " + in.nextLine());

    int i = 0;
    int counter = 0;

    String a = in.next();
    while (in.hasNextLine()) {

        while (i < a.length()) {
            if (a.charAt(i) == ' ') {
                counter++;
            }
            i++;
        }
        i = 0;

    }

    int wordcount = (counter + 1);
    System.out.println("The word count is " + wordcount);
}
  打赌Aiwegfu24r; q0912j感冒jus not Money Nil Nelzik1-aj

     

129puehilhwueildgyuol

输入文件。

 public static void main(String[] args) throws IOException {
        int count = 0;

        Scanner in = new Scanner(new FileReader( "/input5.txt"));//file read
        while (in.hasNextLine()) {

            System.out.println("echo print of the input: " + in.nextLine());
            in.reset();
        }

        while (in.hasNext()) {

            count++;
            in.next();

        }
        System.out.println("The word count is " + count);

    }

这是新代码。

3 个答案:

答案 0 :(得分:3)

Scanner.next()的默认分隔符是空格。每次调用next()时,程序都会删除空格并返回“单词”。因此,如果您只计算next()的调用次数,您可能会发现问题更容易:

Scanner in = new Scanner(new FileReader(dir + "/input5.txt"));
int count = 0;

while (in.hasNext()) {
    count++;
    in.next();
}

另外,请注意在初始化计数循环之前调用nextLine()。扫描程序对象有一个内部缓冲区,每次调用next()或nextLine()时,该缓冲区的光标都会向前移动。您需要从程序中删除对nextLine()的调用,或者需要重新初始化您的扫描程序。

如果要输出文件内容(就像你看到的那样),只需执行以下操作:

System.out.println("File contents:");
while (in.hasNextLine()) {
    System.out.println(in.nextLine());
}
in = new Scanner(new FileReader(dir + "/input5.txt"));
//now you can do your counting, as the buffer has been reset

答案 1 :(得分:1)

怎么样:

int count = 0;
while (in.hasNextLine())
    count += in.nextLine().trim().split("\\s+").length;

如果出现分割中的正则表达式会消耗多个空格,无论间距如何都能为您提供正确的单词数。

对trim的调用会删除前导空格(如果存在)。

答案 2 :(得分:1)

您可以使用 -

public static int wordCount(String s) {
    int counter = 0;
    s = s.trim(); //edit

    for (int i = 0; i <= s.length() - 1; i++) {
        if (Character.isLetter(s.charAt(i))) {
            counter++;
            for (; i <= s.length() - 1; i++) {
                if (s.charAt(i) == ' ') {
                    counter++;
                }
            }

        }

    }
    return counter;
}