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