2013-03-07 70 views
0

我似乎想起了Apache Commons或類似的API,它允許您使用類似於Freemarker或Velocity(或者JSP容器)的屬性擴展來替換內聯字符串,而無需拖入這些工具。任何人都可以回憶這個API是什麼?顯然,名是不正確的,但結構看起來是這樣的:字符串擴展實用程序

Person person = ...; 
String expanded = SomeAPI.expand(
        "Hi ${name}, you are ${age} years old today!", 
        person); 

我不是在尋找關於如何做到這一點的其他建議(例如使用格式化),只是現有的API。

回答

0

這應該使用Apache下議院LangBeanUtils做的伎倆:

StrSubstitutor sub = new StrSubstitutor(new BeanMap(person)); 

    String replaced = sub.replace("Hi ${name}, you are ${age} years old today!"); 
3

MessageFormat可能是你在找什麼:

final MessageFormat format = new MessageFormat("Hi {0}, you are {1, number, #} years old today!"); 
final String expanded = format.format(new Object[]{person.getName(), person.getAge()}); 

還有像String.format一個C:

final String expanded = String.format("Hi %1s, you are %2s years old today!", person.getName(), person.getAge()); 

測試:

public static void main(String[] args) { 
    final MessageFormat format = new MessageFormat("Hi {0}, you are {1,number,#} years old today!"); 
    System.out.println(format.format(new Object[]{"Name", 15})); 
    System.out.println(String.format("Hi %1s, you are %2s years old today!", "Name", 15)); 
} 

輸出:

Hi Name, you are 15 years old today! 
Hi Name, you are 15 years old today! 
+0

+1感謝您的答覆,但我想在POJO通過,因爲該字符串可能是動態的,這就是爲什麼我不使用你列出的任何方法。 – 2013-03-07 18:27:24

+0

什麼是所有'最後'? – 2013-03-07 20:41:25

+0

我喜歡它們,我認爲它們使代碼更加明顯。看看Rober Simmons Jr.的[Hardcore Java](http://shop.oreilly.com/product/9780596005689.do)。 – 2013-03-07 20:43:41