加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何使用bean中的属性格式化字符串

发布时间:2020-12-15 03:01:40 所属栏目: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);
  }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读