Kamlesh Kanazariya
Kamlesh Kanazariya

Reputation: 1259

Get values from below string using regex in java

I am a beginner to regex.

I have below String:

fail:2,success:1,fetch:1

Output Map: Get Map which contains all key-values as below:

fail - 2 (key=fail, value=2)

success - 1

fetch - 1

I have tried using below solution:

public static void main(String arg[]) {            
String msg = "fail:1,success:1,policyfetch:1"; 
System.out.println(getKeyValuesFromMsg(msg));  
}                                                  

public static Map getKeyValuesFromMsg(String msg) {
  if (msg != null) {                             
    Map keyvalues = new HashMap();             
    Pattern p = Pattern.compile("(\\w+):(,+)");
    Matcher m = p.matcher(msg);                
    while (m.find()) {                         
        keyvalues.put(m.group(1), m.group(2)); 
    }                                          
    return keyvalues;                          
} else                                         
    return Collections.emptyMap();             
}                                               

Upvotes: 0

Views: 72

Answers (3)

Karan
Karan

Reputation: 499

i would have used below method for the same.

public static void main(String arg[]) {            
    String msg = "fail:1,success:1,policyfetch:1"; 
    System.out.println(getKeyValuesFromMsg(msg));  
    }

private static Map<Object, Object> getKeyValuesFromMsg(String msg) {
    Map<Object,Object> mapObj = new HashMap<Object,Object>();
    for (int i=0;i<msg.split(",").length;i++)
    mapObj.put(msg.split(",")[i].split(":")[0],msg.split(",")[i].split(":")[1]);
    return mapObj;
}

Upvotes: 0

jian hu
jian hu

Reputation: 39

my solution:

    public static Map<String, Integer> trans2Map(String source) {
    if (null == source) {
        return Collections.emptyMap();
    }
    Map<String, Integer> result = new HashMap<>();
    Arrays.stream(source.split(","))
            .filter(pair -> pair.split(":").length == 2)
            .forEach(pair -> {
                String key = pair.split(":")[0];
                Integer value;
                try {
                    value = Integer.parseInt(pair.split(":")[1]);
                } catch (Exception e) {
                    return;
                }
                result.put(key, value);
            });
    return result;
}

Upvotes: -1

Yati Sawhney
Yati Sawhney

Reputation: 1402

You can use the split function, The following snippet should work fine

Map<String,String> map = new HashMap();
    String str = "fail:2,success:1,fetch:1";
    String[] keyValueParts = str.split(",");
    for(String s  : keyValueParts){
        String parts[] = s.split(":");
        map.put(parts[0],parts[1]);
    }

    System.out.println(map);

Upvotes: 2

Related Questions