在java中只打印重复的单词

时间:2015-07-24 04:55:38

标签: java arrays string treemap

我想只显示字符串中出现多次的单词,不应打印单个字符串外观。此外,我想打印长度超过2的字符串(以消除是,等等)..

我试过的代码。所有字符串和节目的印记都是出现次数..

代码:

public static void main(String args[])
{
    Map<String, Integer> wordcheck = new TreeMap<String, Integer>();
    String string1="world world is new world of kingdom of palace of kings palace";
    String string2[]=string1.split(" ");


    for (int i=0; i<string2.length; i++) 

     {
        String string=string2[i];
        wordcheck.put(string,(wordcheck.get(string) == null?1:   (wordcheck.get(string)+1)));

      }

    System.out.println(wordcheck);


}

输出:

{is=1, kingdom=1, kings=1, new=1, of=3, palace=2, world=3}

不应打印单个字符串外观... 我也想打印长度超过2的字符串(以消除是,等等)..

6 个答案:

答案 0 :(得分:2)

使用它

for (String key : wordcheck.keySet()) {

        if(wordcheck.get(key)>1)
            System.out.println(key + " " + wordcheck.get(key));
}

答案 1 :(得分:1)

跟踪地图中出现的次数将允许您执行此操作。

import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;

public class Test1
{
    public static void main(String[] args)
    {
        String string1="world world is new world of kingdom of palace of kings palace";
        String string2[]=string1.split(" ");
        HashMap<String, Integer> uniques = new HashMap<String, Integer>();
        for (String word : string2)
        {
            // ignore words 2 or less characters long
            if (word.length() <= 2)
            {
                continue;
            }
            // add or update the word occurrence count
            Integer existingCount = uniques.get(word);
            uniques.put(word, (existingCount == null ? 1 : (existingCount + 1)));
        }

        Set<Entry<String, Integer>> uniqueSet = uniques.entrySet();
        boolean first = true;
        for (Entry<String, Integer> entry : uniqueSet)
        {
            if (entry.getValue() > 1)
            {
                System.out.print((first ? "" : ", ") + entry.getKey() + "=" + entry.getValue());
                first = false;
            }
        }

    }
}

答案 2 :(得分:1)

要获得多次出现的单词,您必须过滤地图。

根据您的Java版本,您可以使用以下任一项:

List<String> wordsOccuringMultipleTimes = new LinkedList<String>();
for (Map.Entry<String, Integer> singleWord : wordcheck.entrySet()) {
    if (singleWord.getValue() > 1) {
        wordsOccuringMultipleTimes.add(singleWord.getKey());
    }
}

或从Java 8开始这个等效的Lambda表达式:

List<String> wordsOccuringMultipleTimes = wordcheck.entrySet().stream()
        .filter((entry) -> entry.getValue() > 1)
        .map((entry) -> entry.getKey())
        .collect(Collectors.toList());

关于漂亮的打印,你必须在迭代结果时做类似的事情。

答案 3 :(得分:1)

使用以下代码

for (String key : wordcheck.keySet()) {

    if(wordcheck.get(key)>1)
        System.out.println(key + " " + wordcheck.get(key));

}

答案 4 :(得分:0)

TreeMap.toString()继承自AbstractMap,文档声明

  

返回此地图的字符串表示形式。字符串表示由地图的entrySet视图的迭代器返回的顺序中的键 - 值映射列表组成,括在括号中(&#34; {}&#34;)< / strong>即可。相邻的映射由字符&#34;,&#34;分隔。 (逗号和空格)。每个键值映射都呈现为键,后跟等号(&#34; =&#34;),后跟相关值。通过String.valueOf(Object)将键和值转换为字符串。

最好你编写自己的方法,以你想要的方式打印出TreeMap。

答案 5 :(得分:0)

request
          .get(config.APIHost + apiUrl)
          .set('Accept', 'application/json')
          .withCredentials()
          .end(function (err, res) {
                if (!err && res.body) {
                    disptach(() => {
                        return {
                            type: actionType || GET_DATA,
                            payload: {
                                response: res.body
                            }
                        }
                    });
                }
          });