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