-4

有人可以告诉我如何计算字符串数组中的重复值吗?

例如:

String [] names = {"Caty", "John", "Nick", "John", "Philip", "Caty", "Caty"};

返回值应该是 5,因为 Caty 出现了 3 次,而 John 出现了 2 次。

谢谢

4

3 回答 3

3

我会将名称插入Map<String, Integer>其中,键是名称,值是插入名称的次数。换句话说,对于每个名称,在地图中查找它以获取先前的计数。如果未找到,则先前的计数为 0。将先前的计数加一并put(name, newCount)返回到地图中。添加完名称后,遍历条目集并对大于一的计数求和(如果我理解您的计数方法)。

String[] names = ...
Map<String, Integer> map = new HashMap<>(names.length);
for (String name : names) {
   Integer count = map.get(name);
   if (count == null) {
       count = 0;
   }
   map.put(name, count + 1);
}
int count = 0;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
   if (entry.getValue() > 1) {
      count += entry.getValue();
   }
}
于 2013-10-11T18:14:35.607 回答
1

请试试这个

public static void main(String[] args) 
{
    String[] names = {"Caty", "John", "Nick", "John", "Philip", "Caty", "Caty"};
    HashMap<String, Integer> repeatNames = new HashMap<String, Integer>();
    int repeatCount = 0;

    for (int i = 0; i < names.length; i++) {
        int count = 0;
        for (int k = 0; k < names.length; k++) {
            if (names[i] == names[k]) {
                count++;
            }
        }

        if (count > 1) {
            if (!repeatNames.containsKey(names[i])) {
                System.out.println(names[i] + ":" + count);
                repeatNames.put(names[i], count);
                repeatCount += count;
            }
        }
    }
    System.out.println("Total Count:" + repeatCount);
}

输出

Caty:3
John:2
Total Count:5
于 2013-10-11T18:27:50.653 回答
0

应用嵌套循环的概念。

在第一个循环中遍历数组并获取第 i 个元素,然后在下一个循环中检查整个数组中的元素并将它们存储在 map 中以查找重复值

String[] names = {"Caty", "John"........}

Map<String, int> duplicateMap = new HashMap<String, int>();
for (i = 0; i <= names.length; i++) {
    String x = names[i];
    int count = 0;
    for (j = 0; j <= names.length; j++) {
        if (x.equals(names[j])
        count++;
    }
    duplicateMap.put(x, count);
}

然后此地图将包含所有元素重复的所有信息以及它们的重复计数是多少。

于 2013-10-11T18:14:01.243 回答