Wednesday, 8 May 2013

Custom String Formator in Java


Custom String Formator in Java

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class CustomStringFormator {
private static final String fieldStart = "\\$\\{";
    private static final String fieldEnd = "\\}";

    private static final String regex = fieldStart + "([^}]+)" + fieldEnd;
    private static final Pattern pattern = Pattern.compile(regex);

    public static String format(String format, Map<String, Object> objects) {
        Matcher m = pattern.matcher(format);
        String result = format;
        try{
        while (m.find()) {
            String[] found = m.group(1).split("\\.");
            Object o = objects.get(found[0]);
            Field f = o.getClass().getField(found[1]);
            String newVal = f.get(o).toString();
            result = result.replaceFirst(regex, newVal);
        }
        }catch(Exception ex){}
        return result;
    }

    static class Dog {
        public String name;
        public String owner;
        public String gender;
    }
    static class User{
    public String username;
    public int id;
    public String country;
    }

    public static void main(String[] args) {
        Dog d1 = new Dog();
        d1.name = "fido";
        d1.owner = "Jane Doe";
        d1.gender = "him";
        User u=new User();
        u.id=2;
        u.username="wakil";
        u.country="india";
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("d", d1);
        map.put("u",u);
        System.out.println(CustomStringFormator.format("My dog is named ${d.name}, and ${d.owner} owns ${d.gender}. hell user your ${u.id} and username is ${u.username} and country is ${u.country}", map));
    }
}

No comments:

Post a Comment