Java 从几行用户输入中计算字数和字符数

Java 从几行用户输入中计算字数和字符数,java,Java,说明:“编写一个程序,从扫描仪中读取几行文本(每行以“.”结尾)。它应计算字数和非空格字符数。当程序在单独的输入行中读取单词(完成)时,应停止接受输入。” 我的程序有问题。每当我输入示例文本并键入DONE时,单词和字符的数量仅与单词“DONE”匹配。如果有人能提供一个有效的解决方案,这将对我理解手头的问题非常有帮助 public static void main(String[] args) { Scanner input = new Scanner(System.in); Sy

说明:“编写一个程序,从扫描仪中读取几行文本(每行以“.”结尾)。它应计算字数和非空格字符数。当程序在单独的输入行中读取单词(完成)时,应停止接受输入。”

我的程序有问题。每当我输入示例文本并键入DONE时,单词和字符的数量仅与单词“DONE”匹配。如果有人能提供一个有效的解决方案,这将对我理解手头的问题非常有帮助

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Please enter text (type DONE to quit): ");
    String text = "";
    while (!"DONE".equals(text)) {
        text = input.next();
    }
    String[] numOfWords = text.split(" ");
    String[] numOfChars = text.split("");
    System.out.print("Number of words: " + numOfWords.length);
    System.out.println("");
    System.out.print("Number of non-space characters: " + numOfChars.length);
    }
}

在您的代码中,所发生的是,您最后给出的输入是完成的,因此它只计算完成使用以下代码

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Please enter text (type DONE to quit): ");
    String text = "";
    while (true) {
        if(!text.equals("DONE")){
                 break;
         }
        text += " " + input.nextLine();
         
    }
    String[] numOfWords = text.split(" ");
    String[] numOfChars = text.split("");
    System.out.print("Number of words: " + numOfWords.length);
    System.out.println("");
    System.out.print("Number of non-space characters: " + 
     numOfChars.length);
}

}

在您的代码中,所发生的是,最后您给出的输入已完成,因此它只计算已完成使用以下代码

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Please enter text (type DONE to quit): ");
    String text = "";
    while (true) {
        if(!text.equals("DONE")){
                 break;
         }
        text += " " + input.nextLine();
         
    }
    String[] numOfWords = text.split(" ");
    String[] numOfChars = text.split("");
    System.out.print("Number of words: " + numOfWords.length);
    System.out.println("");
    System.out.print("Number of non-space characters: " + 
     numOfChars.length);
}

}

由于上述答案不正确(无法编译或工作),您可以尝试以下方法:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Please enter text (type DONE to quit): ");
    String text = "";
    String output = "";
    while (!"DONE".equals(text)) {
        text = input.next();
        output += text.replace("DONE", "") + " ";
    }
    String[] numOfWords = output.split(" ");
    String[] numOfChars = output.split("");
    System.out.print("Number of words: " + numOfWords.length);
    System.out.println("");
    System.out.print("Number of non-space characters: " + numOfChars.length);
}

有效地为输入字符串创建另一个存储,一旦提供了DONE关键字,在删除单词“DONE”后退出循环。

由于上述答案不正确(无法编译或工作),您可以尝试以下方法:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Please enter text (type DONE to quit): ");
    String text = "";
    String output = "";
    while (!"DONE".equals(text)) {
        text = input.next();
        output += text.replace("DONE", "") + " ";
    }
    String[] numOfWords = output.split(" ");
    String[] numOfChars = output.split("");
    System.out.print("Number of words: " + numOfWords.length);
    System.out.println("");
    System.out.print("Number of non-space characters: " + numOfChars.length);
}

有效地为输入字符串创建另一个存储,一旦提供了DONE关键字,在删除单词“DONE”后退出循环。

其他两个答案都无法修复计数字符数时的错误。以下代码正确地解释了空格的不足,删除了输入终止文本,并正确地计算了非空格字符的数量:

import java.util.*;
public class MyClass {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Please enter text (type DONE to quit): ");
        String text = "";
        String output = "";
        while (!"DONE".equals(text)) {
            text = input.next();
            output += text.replace("DONE", "") + " ";
        }
        String[] numOfWords = output.split(" ");
        int numOfChars = output.replace(" ", "").length();
        System.out.print("Number of words: " + numOfWords.length);
        System.out.println("");
        System.out.print("Number of non-space characters: " + numOfChars);
    }
}
输入:完成四个单词的文本

输出

请输入文本(键入“完成”退出):

字数:4


非空格字符数:17

其他两个答案都无法修复字符数计数错误。以下代码正确地解释了空格的不足,删除了输入终止文本,并正确地计算了非空格字符的数量:

import java.util.*;
public class MyClass {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Please enter text (type DONE to quit): ");
        String text = "";
        String output = "";
        while (!"DONE".equals(text)) {
            text = input.next();
            output += text.replace("DONE", "") + " ";
        }
        String[] numOfWords = output.split(" ");
        int numOfChars = output.replace(" ", "").length();
        System.out.print("Number of words: " + numOfWords.length);
        System.out.println("");
        System.out.print("Number of non-space characters: " + numOfChars);
    }
}
输入:完成四个单词的文本

输出

请输入文本(键入“完成”退出):

字数:4



非空格字符数:17

您在while循环的每次迭代中都会覆盖
文本
,您不会保留以前迭代中的输入。结果是,最后您输入了DONE,因此它只计算DONE,所以我根据您的评论做了一些更改。while循环现在看起来是这样的:while(!text.contains(“DONE”){text+=input.next();}但是现在当我运行它时,DONE不会终止输入。@Lev1athan909好的,是的。对于要结束的上一个循环版本,
text
必须包含“DONE”,因此它将计入以后所做的所有其他操作中。您可以使用适当的参数调用
substring()
,用
text
减去最后四个字符的内容覆盖
text
。在while循环的每次迭代中,您都会覆盖
text
,您没有保留以前迭代中的输入。所发生的是,最后您输入DONE,这样它就算作DONE onlyway,所以我根据您的评论做了一些更改。while循环现在看起来是这样的:while(!text.contains(“DONE”){text+=input.next();}但是现在当我运行它时,DONE不会终止输入。@Lev1athan909好的,是的。对于要结束的上一个循环版本,
text
必须包含“DONE”,因此它将计入以后所做的所有其他操作中。您可以使用适当的参数调用
substring()
,用
text
减去最后四个字符的内容覆盖
text
。我希望它能帮助您在
if
中缺少右括号。此外,如果每次输入一个单词,此代码和原始代码都不能解释可能缺少空格的原因,在这种情况下,它们会给出一个输出,说明只有一个单词。您测试过吗?如果你这样做,你会感到惊讶的。如果你不确定代码是否正确,你就不应该发布答案。是的,它会告诉你正确的字数,但不会告诉你字符。在我的测试中,这两个数字都不正确。如果我输入以下五个输入,它会告诉我有一个单词,而不是应该的四个单词:text,with,four,words,DONE(忽略逗号,它们只是这个注释中的分隔符,对于我在不同行中输入的测试)。我希望它能帮助您在
If
中缺少一个右括号。此外,如果每次输入一个单词,此代码和原始代码都不能解释可能缺少空格的原因,在这种情况下,它们会给出一个输出,说明只有一个单词。您测试过吗?如果你这样做,你会感到惊讶的。如果你不确定代码是否正确,你就不应该发布答案。是的,它会告诉你正确的字数,但不会告诉你字符。在我的测试中,这两个数字都不正确。如果我输入以下五个输入,它告诉我有一个单词,而不是应该的四个单词:text,with,four,words,DONE(忽略逗号,它们只是这个注释中的分隔符,对于我在不同行中输入的测试)。