打印从字符串中出现多次的单词

时间:2011-05-02 19:10:14

标签: java string

我正在尝试查找并打印出多个字符串中的单词。它几乎可以工作。然而,我正在与一个小问题作斗争。由于它们在句子中出现两次,因此打印出两次。我希望它们只打印一次:

这是我的代码:

public class Main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    String sentence = "is this a sentence or is this not ";
    String[] myStringArray = sentence.split(" "); //Split the sentence by space.

    int[] count = new int[myStringArray.length];
    for (int i = 0; i < myStringArray.length; i++){
       for (int j = 0; j < myStringArray.length; j++){
           if (myStringArray[i].matches(myStringArray[j]))
               count[i]++;
           //else break;
       }
    }
    for (int i = 0; i < myStringArray.length; i++) {
            if (count[i] > 1)
          System.out.println("1b. - Tokens that occurs more than once: " + myStringArray[i] + "\n");
    }
}

}

4 个答案:

答案 0 :(得分:0)

您可以尝试使用for (int i = 0; i < myStringArray.length; i+=2)

答案 1 :(得分:0)

递增后,

在第一场比赛中休息。那么它也不会增加第二场比赛。

答案 2 :(得分:0)

您的代码存在一些问题。

如果您注意到,您的代码将查看n个元素的列表n ^ 2次。 如果单词的出现次数是两次。您将两次递增每个单词的计数值。 您需要跟踪的是您已经看过的单词集,并检查您遇到的新单词是否已经被看到。

如果你的句子中出现了3个单词,那么每个单词的计数为3. 3是不需要为每个标记存储的冗余数据,而只是单词。

如果你知道Map如何运作,那么这一切都可以轻松完成。

这是一个可行的实现。

import java.util.HashMap;

public class Main {
    public static void main(String[] args) {

        String sentence = "is this a sentence or is this not ";
        String[] myStringArray = sentence.split("\\s"); //Split the sentence by space.

        Map <String, Integer> wordOccurrences = new HashMap <String, Integer> (myStringArray.length);

        for (String word : myStringArray)
            if (wordOccurrences.contains(word))
                wordOccurrences.put(word, wordOccurrences.get(word) + 1);
            else wordOccurrences.put(word, 1);

        for (String word : wordOccurrences.keySet())
            if (wordOccurrences.get(word) > 1)
                System.out.println("1b. - Tokens that occurs more than once: " + word + "\n");
    }
}

答案 3 :(得分:0)

我们想从输入字符串中找到重复的单词。所以,我建议采用以下方法:

  
      
  1. 制作一个哈希地图实例。键(String)将是单词,值(Integer)将是其出现的频率。
  2.   
  3. 使用split(“\ s”)方法拆分字符串,以生成仅包含单词的数组。
  4.   
  5. 引入一个整数类型'frequency'变量,初始值为'0'。
  6.   
  7. 迭代字符串数组并在检查频率后,将每个元素(或单词)添加到地图中(如果该键的频率为0)或者   密钥(字)存在,只增加频率1.
  8.   
  9. 所以你现在只剩下每个单词及其频率。
  10.   

例如,如果输入字符串是“我们变脏了,因为这个地球受到污染。我们必须停止它。”
所以,地图将是
{(“We”,2),(“are”,1),(“getting”,2),(“dirty”,1),(“as”,1),(“this”,1),( “earth”,1),(“is”,1),(“污染”,1),(“必须”,1),(“停止”,1),(“它。”,1)} <登记/> 现在您知道下一步是什么以及如何使用它。我同意Kaushik的意见。