2017-04-18 22 views
-3

一個Java庫拋出「標籤」分隔值(每行)下面REGEX獲得標籤值和它的頻率,其我使用

ID1 John 
ID2 Jerry 
ID3 John 
ID4 Mary 
ID5 John 

我試圖獲得names和示出單個String輸出作爲其頻率

John 3 
Jerry 1 
Mary 1 

有沒有辦法實現這個使用正則表達式(字符串匹配再取頻率計數)

回答

0

是有一種方法來實現這個使用正則表達式(子串匹配,然後採取 的頻率計數)?

這不是100%可能,如果它不是不可能的,所以你可以創建自己的簡單程序來解決這個問題。

下面是一段簡單的代碼就可以解決你的問題:

public static void main(String[] args) { 
    String str = "ID1 John\n" 
      + "ID2 Jerry\n" 
      + "ID3 John\n" 
      + "ID4 Mary\n" 
      + "ID5 John"; 

    //replace all the first part which contain (ID_Number_Space) 
    //And split with \n 
    String spl[] = str.replaceAll("(ID\\d+\\s)", "").split("\n"); 

    //result of this array is [John, Jerry, John, Mary, John] 

    //create a map, which contain your key (name) value (nbr occurrence) 
    Map<String, Integer> map = new HashMap<>(); 
    for (String s : spl) { 
     if (map.containsKey(s)) { 
      map.put(s, map.get(s) + 1); 
     } else { 
      map.put(s, 1); 
     } 
    } 

    //Print your array 
    for (Map.Entry entry : map.entrySet()) { 
     System.out.println(entry.getKey() + " - " + entry.getValue()); 
    } 
} 

輸出

John - 3 
Jerry - 1 
Mary - 1