java – 如何使用bean中的属性格式化字符串
发布时间:2020-05-22 11:20:31 所属栏目:Java 来源:互联网
导读:我想使用格式创建一个String,用bean中的属性替换格式的一些标记.是否有支持此功能的库或者我是否必须创建自己的实现? 让我举一个例子来证明.说我有一个豆人; public class Person { private String id; private String name; private String age; //getters
|
我想使用格式创建一个String,用bean中的属性替换格式的一些标记.是否有支持此功能的库或者我是否必须创建自己的实现? 让我举一个例子来证明.说我有一个豆人; public class Person {
private String id;
private String name;
private String age;
//getters and setters
}
我希望能够指定类似的格式字符串; "{name} is {age} years old."
"Person id {id} is called {name}."
并使用bean中的值自动填充格式占位符,例如; String format = "{name} is {age} old."
Person p = new Person(1,"Fred","32 years");
String formatted = doFormat(format,person); //returns "Fred is 32 years old."
我看过MessageFormat,但这似乎只允许我传递数字索引,而不是bean属性. 解决方法滚动我自己,现在测试.欢迎评论.import java.lang.reflect.Field;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class BeanFormatter<E> {
private Matcher matcher;
private static final Pattern pattern = Pattern.compile("{(.+?)}");
public BeanFormatter(String formatString) {
this.matcher = pattern.matcher(formatString);
}
public String format(E bean) throws Exception {
StringBuffer buffer = new StringBuffer();
try {
matcher.reset();
while (matcher.find()) {
String token = matcher.group(1);
String value = getProperty(bean,token);
matcher.appendReplacement(buffer,value);
}
matcher.appendTail(buffer);
} catch (Exception ex) {
throw new Exception("Error formatting bean " + bean.getClass() + " with format " + matcher.pattern().toString(),ex);
}
return buffer.toString();
}
private String getProperty(E bean,String token) throws SecurityException,NoSuchFieldException,IllegalArgumentException,IllegalAccessException {
Field field = bean.getClass().getDeclaredField(token);
field.setAccessible(true);
return String.valueOf(field.get(bean));
}
public static void main(String[] args) throws Exception {
String format = "{name} is {age} old.";
Person p = new Person("Fred","32 years",1);
BeanFormatter<Person> bf = new BeanFormatter<Person>(format);
String s = bf.format(p);
System.out.println(s);
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 之间的关联:SpringIocContainer | ApplicationCon
- java – 如何从Apache Wicket中的组件中正确删除AjaxSelfUp
- java – 在Spring MVC WebApp中推送通知
- java – 你应该怎么做?
- Java实现“年-月-日 上午/下午时:分:秒”的简单代码
- Java中是否有Perl实现?
- Android MD5加密算法
- java – 关于Linux上的getBounds()和setBounds()的bug_id =
- java-ee – 在maven-embedded-glassfish-plugin上的CDI注入
- 我可以使用混合java和scala代码在Maven中编译具有依赖关系的
