【问题标题】:How do you create a word frequency counter in Java without hashmap or arrays?如何在没有 hashmap 或数组的情况下在 Java 中创建词频计数器?
【发布时间】:2017-10-23 01:06:02
【问题描述】:

我一直在尝试用 Java 创建一个程序,输出在字符串中找到的每个单词以及它们出现的次数。我一直在尝试在不使用任何数组或哈希映射的情况下执行此操作,并且仅使用字符串操作方法和字符串标记器,但我似乎无法理解逻辑。

这是我目前所拥有的。

Scanner sc=new Scanner(System.in);
String input="";
int count=1;
String word="";

System.out.println("Enter your paragraph.");
input=sc.nextLine();

StringTokenizer st=new StringTokenizer(input);

while(st.hasMoreTokens()){
    word=st.nextToken();
    while(st.hasMoreTokens()){
        if(st.nextToken()==word){
            count++;
        }
    }
    System.out.println(word+": "+count);
    input=input.replaceAll(currentToken," ")
    count=1
}

我当前收到的输出是(输入的第一个单词)=0。

有什么帮助或建议可以引导我朝着正确的方向前进吗?

【问题讨论】:

  • 为什么限制hashmaps?
  • Javadoc of StringTokenizer since Java 1.4 (2002): StringTokenizer 是一个遗留类,出于兼容性原因保留,尽管它的用途是在新代码中不鼓励。建议任何寻求此功能的人使用Stringsplit 方法或java.util.regex 包。 --- 告诉你的老师扔掉那本15 年前的教材。是时候获取这十年的材料了。
  • @coolioasjulio 我在学校,还没有学过哈希图。我正在尝试仅使用基本的 Java 知识来解决这个问题。
  • 内层while循环结束后(因为st.hasMoreTokens()返回了false),你认为外层while循环中的st.hasMoreTokens()会返回什么?
  • 你为什么使用两个while循环并且还使用.equals来比较字符串而不是==

标签: java stringtokenizer


【解决方案1】:

你很接近。但是0作为结果与您发布的代码不匹配,它是1,但即使出现更多。那是因为您在if 中使用了== 而不是.equals()

在循环结束时,标记器已被内部循环耗尽,因此您应该重新初始化一个新的,尤其是在您更改了 input 字符串之后。

StringTokenizer st = new StringTokenizer(input);

while (st.hasMoreTokens()) {
  word = st.nextToken();

  while (st.hasMoreTokens()) {
    if (st.nextToken().equals(word)) {
      count++;
    }
  }
  System.out.println(word + ": " + count);
  input = input.replaceAll(word, "");
  count = 1;
  st = new StringTokenizer(input);
}

注意:Andreascoolioasjulio 提到不鼓励使用 StringTokenizer(更多关于它的信息 here)。 p>

【讨论】:

  • 我在想我必须重新初始化字符串标记器!谢谢!
  • 如果我可以... .equals() > ==
  • 应该注意StringTokenizer是一个遗留类,真的不应该使用。您可能必须在此作业中使用它,但请记住这一点。
  • @PranavAvva 是的。 equals 应该实现匹配相同的内容,并且因为== 匹配身份,所以它具有相同的内容。因此,如果a == b 为真,那么a.equals(b) 也应该为真。但它可以以不同的方式实现。
猜你喜欢
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 2022-07-13
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多