如何在没有hashmap或数组的情况下在Java中创建单词频率计数器?

时间:2017-10-23 01:06:03

标签: 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.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.

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

1 个答案:

答案 0 :(得分:2)

你很亲密。但是0结果与您发布的代码不符,它是1,但即使有更多事件发生。这是因为您在==中使用了.equals()而不是if

在循环结束时,标记化器已被内循环耗尽,因此您应该重新初始化一个新的,特别是在您已经更改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);
}

注意:正如 Andreas coolioasjulio 所提到的那样,StringTokenizer不鼓励使用{更多关于它here )。