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

Java 从文本文件中计算空格以查找其字数,java,if-statement,while-loop,Java,If Statement,While Loop,我想创建一个应用程序,从一个文本文件中读取多行单词。 它将通过计算单词之间的空格数并添加一个校正因子来输出单词计数 我不确定使用什么输入法来实现这一点。 我的当前代码输出不正确。它不会计算第一个后面的单词,也不会计算空格 我怎样才能修好它 public static void main(String[] args) throws IOException { Scanner in = new Scanner(new FileReader( "/input5.txt"));//file r

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

我不确定使用什么输入法来实现这一点。 我的当前代码输出不正确。它不会计算第一个后面的单词,也不会计算空格

我怎样才能修好它

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);
}
这是新的密码

那么:

int count = 0;
while (in.hasNextLine())
    count += in.nextLine().trim().split("\\s+").length;
拆分中的正则表达式在出现多个空格时会占用多个空格,无论空格大小,都会提供正确的字数

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

如何:

int count = 0;
while (in.hasNextLine())
    count += in.nextLine().trim().split("\\s+").length;
拆分中的正则表达式在出现多个空格时会占用多个空格,无论空格大小,都会提供正确的字数

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

您可以使用-

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;
}
公共静态int字数(字符串s){
int计数器=0;
s=s.trim();//编辑
对于(int i=0;i您可以使用-

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;
}
公共静态int字数(字符串s){
int计数器=0;
s=s.trim();//编辑

对于(int i=0;i,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

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

删除
字符串a=in.next();
并在第一个while内添加
字符串a=in.nextLine();
输出为1如果我这样做,请更新问题中的代码删除
字符串a=in.next();
并在第一个while内添加
字符串a=in.nextLine();
输出为1如果我这样做,请在同一问题中更新您的代码。执行
s.trim()
不会更改
s
,因为字符串是不可变的。您需要重新分配
s
s=s.trim()
相同问题。执行
s.trim())
不会更改
s
,因为字符串是不可变的。您需要重新分配
s
s=s.trim()
如果我尝试,计数输出为1如果我调用next()首先?我希望应用程序先打印输入,然后打印字数。这会导致字数为0。我用新代码更新了问题,修复了,我不再需要有关此问题的帮助。抱歉,修复了。reset()没有按我预期的方式工作,我的错误。如果我尝试,则计数输出为1。如果我调用next()会丢弃什么首先?我想让应用程序先打印输入,然后打印字数。这会导致字数为0。我用新代码更新了问题,修复了,我不再需要这个问题的帮助。抱歉,修复了。reset()没有按我预期的方式工作,我的错。