【问题标题】:How can I make 'Split' and 'wordCount' methods work together?如何使“Split”和“wordCount”方法一起工作?
【发布时间】:2025-12-27 15:30:10
【问题描述】:

我是一个java初学者,一年级的计算机学生,对java的理解很弱,理解它的结构有很多问题。

这是我到目前为止的代码:

         import java.util.*;

public class hdtest1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);       
String s;
while(true)  
{
    System.out.println("Enter value:");
    s=sc.next();    
    if(s.equals("quit"))                  
    {
        break;
    }
  String[] s = string.split(" ");
   int wordCount = 1;

for (int i = 0; i < str1.length(); i++) 
{
    if (str1.charAt(i) == ' '&& str1.charAt(i+1)!=' ') 
    {
        wordCount++;
    } 
}
 }

 }
    System.out.println(""+s); //to Print string
    System.out.println(""+s.length());  //to print Entered string's length
    System.out.println("Word count is = " +(str1.length()- wordCount));


}

我希望我的 java 输出显示在文本窗口(扫描仪)中输入的文本行、字符总数和每个单词的字符数。例如当用户输入“你好,我的名字是马克”时,我正在寻找的输出是:

      Hello, my name is Mark
      22
      Hello = 5
      my = 2
      name = 4
      is = 2
      Mark = 4
      //Here the scanner loops,appears and is ready for more text to be entered

所以总结一下我的问题 - 请您更正我的错误代码以使其正常工作并输出我想要的内容(如上所示)?非常感谢您的帮助,任何帮助将不胜感激。

目前我的代码显示很多错误,它们是结构性错误,因为我对将不同方法匹配在一起的理解非常薄弱。到目前为止,我发现了许多我认为可以一起工作的代码块,并且我尝试使用代码来操纵这些方法以使这些方法一起工作,但我似乎只会让我的代码变得更糟,因为我不明白许多代码的含义错误以便能够纠正它们。在我开始尝试使用“split”方法拆分扫描仪中输入的单词之前,我的代码运行良好。

以下是错误的快速列表供您查看:

第 15 行 - 重复变量 s,

第 15 行 - 字符串无法解析,

第 18 行 - str1 无法解析,

第 20 行 - str1 无法解析,

第 28 行 - 标记语法错误,错位构造,

第 28 行 - 标记“println”上的语法错误,= 预期在此标记之后,

第 29 行 - 标记上的语法错误,错误的构造,

第 30 行 - 标记上的语法错误,错位的构造,

第 30 行 - 标记“println”上的语法错误,= 预期在此标记之后,

【问题讨论】:

  • 具体来说,您遇到的错误消息是什么?比如,我们看第一条错误信息:"duplicate variable s"那个错误不清楚怎么办?你在一个地方有String s;,然后在第二个地方有String[] s = string.split(" ");(第15行)。其中每一个都是一个变量声明(第二个也有一个初始化器)。您不能在同一范围内两次声明一个变量。
  • 从第一条错误消息开始。阅读。想想看。搜索它。如果你能弄清楚如何解决它,那就去做吧。如果不是,请写一个关于该消息的具体问题,说明您为理解它采取了哪些步骤。根据需要重复。
  • 它告诉你行号,所以这应该是一个很大的帮助。 “无法解决”意味着没有具有该名称的变量。语法错误有点棘手,但如果您修复缩进,它可能会变得清晰。

标签: java split word-count


【解决方案1】:

将一个句子分成组成词,然后简单地对每个词调用 length() 方法来获取字符数。

String[] words = input.split("\\s+");  // get the individual words (separated by white space)
System.out("#words = " + words.length);
for (int i = 0; i < words.length; i++)
    System.out("word[" + i + "]: " + words[i] + " nchars = " + words[i].length());

【讨论】:

    【解决方案2】:

    看起来你只是想要这个:

    int wordCount = string.split(" ").length;
    

    如果要打印单词及其长度:

    for (String word : string.split(" "))
        System.out.println(word + " = " + word.length());
    

    【讨论】:

    • 嗯,我想这确实回答了标题中提出的问题。
    【解决方案3】:

    一旦您从扫描仪获得输入(假设它是一个名为 input 的变量),请尝试:

    // The line below splits the sentence into individual tokens by spaces, and puts them into an array
    String[] allWords = input.split(" "); 
    System.out.println(input);
    System.out.println(input.length()); // Get number of characters in input
    for (int i = 0; i < allWords.length; i++) { // Loop through each word
        String word = allWords[i].replaceAll("[^a-zA-Z]", ""); // This uses a regex to eliminate anything but letters and puts the word into a variable "word"
        System.out.println(word + " = " + word.length()); // Output the word and the length
    }
    

    将此代码块放入扫描仪读取一行的循环中。

    请注意,length() 方法输出字符串中的字符数,包括空格。这就是为什么我们在输出长度时会删除除字母之外的所有其他字符。

    【讨论】:

    • OP 需要学习如何调试,而不是学习如何让互联网上的陌生人为他/她做作业。
    • 非常正确,但有时拥有准确的示例代码是一种很好的学习方式。我试图评论每一行,以便 OP 可以确切地知道发生了什么
    • 你是对的,当然。我只是认识了太多的学生,更糟糕的是,还有太多的专业人士,他们在试图尽量减少“研究”和“分析”等活动的同时勉强勉强度日。
    【解决方案4】:

    耦合指针:

    1. 你有一个 String s 和一个 String[] s,你不能这样做,重命名其中一个。

    2. “str1”在哪里?它尚未被声明或初始化。

    3.

        System.out.println(""+s);
    

    "s" 已经是一个字符串,""+ 是不必要的。

    【讨论】: