2013-10-11 70 views
-4

有人能告訴我如何計算字符串數組中的重複值嗎?在字符串數組中計數重複的值

例如:

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

返回的值應爲5,因爲出現卡蒂3次和John 2次。

謝謝

+2

比較所有的人,並保持一個計數。 –

+4

你如何在現實生活中做到這一點? – Pshemo

+3

在以各種可能的方式回答您的問題之前,請執行以下操作:迄今爲止您嘗試了什麼? –

回答

3

我會將名稱插入Map<String, Integer>,其中鍵是名稱,值是插入名稱的次數。換句話說,對於每個姓名在地圖中查找以獲得以前的計數。如果未找到,則前一個計數爲0.將之前的計數和put(name, newCount)加回地圖中。當您完成添加名稱時,迭代條目集並累計大於1的計數(如果我理解了您的計數方法)。

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(); 
    } 
} 
0

應用嵌套循環的概念。

在第一循環迭代這個數組,並採取第i個元素,並在下一循環檢查該元素在整個陣列,並將它們在地圖中存儲的重複值

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); 
} 

然後這個地圖將所有的信息,所有元素是重複的,什麼是重複計數。

+0

如果名稱列表變大,則此方法執行得不好。 – Rob

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 
相關問題