2017-06-30 23 views
0

我試圖刪除地圖條目,但還沒有弄清楚現在怎麼樣,意思是我有一段時間,我做了另一張地圖。從Map/HashMap中刪除重複的值,並獲得最頻繁的值

  1. 我需要找幾個句子出現。 (我不知道 句子中可能出現的詞語)。
  2. 在句子中獲得最多的併發單詞,無論大寫還是小寫和重音。
  3. 獲取句子中的第二個和第三個併發單詞。
  4. 打印出現次數最多的併發單詞。
  5. 儘可能高效。

點5是最重要的,下面你會看到我到目前爲止。

public class StringTest { 

    public static void main(String[] args) { 

     String stringTest = "En esta cadena tenemos mas cadenas que la cadena principal la primera vez que intente esta solucion no pude mas que intentar una y otra vez vez vez vez"; 
     new StringTest(stringTest); 

    } 

    public StringTest(String string) { 

     String [] splitString = string.split(" "); 
     Map<String, Integer> mapString = new HashMap<String, Integer>(); 
     mapString.put(splitString[0], 1); 

     for (int i=1; i <= splitString.length-1; i++){ 
      if (mapString.containsKey(splitString[i])){ 
       mapString.put(splitString[i], mapString.get(splitString[i])+1); 
      } else{ 
       mapString.put(splitString[i], 1); 
      } 
     } 

     Map<String, Integer> newMap = new HashMap<String, Integer>(); 
     for (Entry<String, Integer> entry : mapString.entrySet()){ 
      if (entry.getValue()!=1){ 
       newMap.put(entry.getKey(), entry.getValue()); 
      } 
     } 

     System.out.println(newMap); 
    } 
} 
+0

兩件事情:1。爲什麼把第一個元素的地圖嗎?我不會做「mapString.put(splitString [0],1);」但改變你的循環從0開始; 2.您需要一個變量來保存trim()值。您正在檢查trim(),但將其放入地圖中不受限制。一個簡單的「String key = splitString [I] .trim();」會工作。然後用鑰匙工作。 – Dakoda

+0

也是第4項:「打印出現次數最多的同時出現的單詞」以讀取他們想要的最高出現次數。可能是我錯了,但如果它是正確的,你可能需要對輸出進行排序。 – Dakoda

+1

@達科達1.-我試圖跳過一個IF做「mapString.put(splitString [0],1);」也嘗試跳過循環的一次迭代。 2.-我留下了舊的代碼,不需要修剪,因爲我對原始語句進行了拆分。關於你的第二條評論我可以對輸出進行排序,但是我不需要在地圖中保留所有我只需要維護排名前三的鍵值。 – Dr3ko

回答

0

你好這裏是用我的解決方案的例子

public class StringTest { 

public static void main(String[] args) { 
    String stringTest = "En esta cadena tenemos mas cadenas que la cadena principal la primera vez que intente esta solucion no pude mas que intentar una y otra vez vez vez vez"; 
    new StringTest(stringTest); 

} 

public StringTest(String string) { 

    String[] splitString = string.split(" "); 

    Map<String, Integer> mapString = new HashMap<String, Integer>(); 

    // Loop the array 
    for (String token : splitString) { 
     // Convert token to lowerCase 
     token = token.toLowerCase(); 
     if (mapString.containsKey(token)) { 
      mapString.put(token, mapString.get(token) + 1); 
     } else { 
      mapString.put(token, 1); 
     } 
    } 

    // Convert Map to List of Map 
    List<Map.Entry<String, Integer>> list = new LinkedList<Map.Entry<String, Integer>>(mapString.entrySet()); 

    // Sort list with Collections.sort(), provide a custom Comparator 
    Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { 

     public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { 
      // o2 first that the order was descendant 
      return (o2.getValue()).compareTo(o1.getValue()); 
     } 
    }); 

    System.out.println("The most concurrent Word: " + list.get(0).getKey()); 
    System.out.println("The second word is: " + list.get(1).getKey() + ", an third is: " + list.get(2).getKey()); 
    System.out.println("The top concurrent words are"); 

    for (Entry<String, Integer> entry : list) { 
     if (entry.getValue() > 1) { 
      System.out.println(entry); 

     } 
    } 
} 

}