【问题标题】:REGEX to get tabbed values and its frequency正则表达式获取选项卡式值及其频率
【发布时间】:2017-04-18 06:27:43
【问题描述】:

我正在使用的 Java 库将“制表符”分隔值作为(每行)单个字符串输出,如下所示

ID1 John
ID2 Jerry
ID3 John
ID4 Mary
ID5 John

我正在尝试获取names 及其频率

John  3
Jerry 1
Mary  1

有没有办法使用正则表达式来实现这一点(子字符串匹配然后取频率计数)

【问题讨论】:

    标签: java regex apache-stringutils


    【解决方案1】:

    有没有办法使用正则表达式来实现这一点(子字符串匹配然后取 频率计数)?

    这不是 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
    

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多