打印字符串中的第一大和第二大元素

时间:2016-05-18 03:46:49

标签: java

以下是我实施的代码。我的疑问是:当我尝试打印字符串中的第一个和第二个Biggest值时,我得到的输出大约为<Orders> <Order> <Item name="123" /> </Order> </Orders> 。 以下是我为以下代码获得的输出:

[second biggest, first biggest]

但是,我想要The output of the map is: real--6 The output of the map is: to--2 The output of the map is: world--1 The output of the map is: hello--0 The list after insertion is: [to, real] The list inserted as [biggest,secondBiggest] after calling main is: [to, real] ......

The list after insertion to be: [real, to]

3 个答案:

答案 0 :(得分:0)

问题似乎是在向列表中添加项目时。当您迭代map.keySet()时,无法保证您将首先获得最大的项目。我要做的最小的改变是在列表中首先添加最大的项目。     

    for (String s1 : map.keySet()) {
        if (map.get(s1).equals(biggest))
            list.add(0, s1);
        else if (map.get(s1).equals(secondBiggest))
            list.add(s1);
    }
这样,如果首先添加secondBiggest,则最大值将位于列表的顶部。

答案 1 :(得分:0)

如果我们将wordcount提取到一个简单的POJO中,我们可以简化您的方法。像,

static class WordCount implements Comparable<WordCount> {
    String word;
    int count;
    WordCount(String word, int count) {
        this.word = word;
        this.count = count;
    }
    @Override
    public int compareTo(WordCount o) {
        return Integer.compare(count, o.count);
    }
}

然后我们可以在repeatedString中使用它。首先,计算String中的单词;然后构建一个List WordCount(s)。对它进行排序(因为它是Comparable它具有自然顺序)。然后构建List以通过反向迭代List的{​​{1}}(对于两个项目)来返回。像,

WordCount

最后,您的static List<String> repeatedString(String s) { Map<String, Integer> map = new HashMap<>(); for (String word : s.split("\\s+")) { map.put(word, !map.containsKey(word) ? 1 : 1 + map.get(word)); } List<WordCount> al = new ArrayList<>(); for (Map.Entry<String, Integer> entry : map.entrySet()) { al.add(new WordCount(entry.getKey(), entry.getValue())); } Collections.sort(al); List<String> ret = new ArrayList<>(); for (int i = al.size() - 1; i >= al.size() - 2; i--) { ret.add(al.get(i).word); } return ret; } 方法应该使用main(或static input应删除)

static input

我得到(根据要求)

static String input = "This is a real project with real code to do "
        + "real things to solve real problems in real world real";
public static void main(String[] args) {
    List<String> lst = repeatedString(input);
    System.out.println("The list inserted as [biggest,"
            + "secondBiggest] after calling main is: " + lst);
}

答案 2 :(得分:0)

如果你只关心最大和最大的, 你可以参考下面的代码 我没有直接创建列表,而是创建了一个数组,在指定的位置添加了必需的元素。 (这样它变得更具可读性)
最后将数组转换为列表。

%