如何在Java中创建没有hashmap或数组的词频计数器?

如何在Java中创建没有hashmap或数组的词频计数器?,java,stringtokenizer,Java,Stringtokenizer,我一直在尝试用Java创建一个程序,输出字符串中的每个单词及其出现的次数。我一直试图在不使用任何数组或hashmap的情况下实现这一点,并且只使用字符串操作方法和字符串标记器,但我似乎无法理解逻辑 这是我到目前为止所拥有的 Scanner sc=new Scanner(System.in); String input=""; int count=1; String word=""; System.out.println("Enter your paragraph."); input=sc.ne

我一直在尝试用Java创建一个程序,输出字符串中的每个单词及其出现的次数。我一直试图在不使用任何数组或hashmap的情况下实现这一点,并且只使用字符串操作方法和字符串标记器,但我似乎无法理解逻辑

这是我到目前为止所拥有的

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


在这方面有什么帮助或建议可以引导我走向正确的方向吗?

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

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

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);
}

注意:正如Andreas和coolioasjulio所提到的,不鼓励使用
StringTokenizer

为什么对hashmaps进行限制?Javadoc自Java 1.4(2002)以来:
StringTokenizer
是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。建议寻求此功能的任何人使用
String
split
方法或
java.util.regex
包告诉你的老师扔掉那本15年前的教材。是时候从这十年中获取素材了。@coolioasjulio我在学校,还没有学会hashmaps。我试图用java的基本知识来解决这个问题。在内部
while
循环结束后(因为
st.hasMoreTokens()
返回
false
),您认为
st.hasMoreTokens()怎么样
在外部的
while
循环将返回?为什么要使用两个while循环并同时使用.equals来比较字符串而不是==我想我必须重新初始化字符串标记器!非常感谢。如果可以的话
.equals()
=
应该注意的是,
StringTokenizer
是一个遗留类,不应该使用。你可能必须在这项任务中使用它,但请记住这一点。@Pranavava是的<应该实现code>equals以匹配相等的内容,因为
==
匹配标识,所以它具有相同的内容。因此,如果
a==b
为真,那么
a.equals(b)
也应为真。但它可以以不同的方式实施。