如何解析包含变量的Java属性?

时间:2011-01-26 14:10:18

标签: java properties

我正在加载一个Java属性文件,如下所示:

transfer_detail = Transfer {0} from {1} to {2} on {3}

解析该属性后,我应该看到如下的字符串:

Transfer 200.30 from Debit Account to Credit Account on 2011/01/26

我实现了一个自我解析器,看起来像:

// simplified for brevity
private static String translate(String string, String... replacements){
    String result = string;
    for(int i = 0; i < replacements.length; i++){
        result = result.replace("{"+i+"}", replacements[i]);
    }
    return result;
}
// and I use it this way:
String result = translate("transaction", "200.30", "Debit Account", etc...);

我一直在想的是,如果在J2SE API中有这样做的话。即使对于像这样的简单事情,我也不喜欢重新发明轮子。你知道其他更简单或更清洁的方法吗?

3 个答案:

答案 0 :(得分:8)

您希望使用the MessageFormat class来填充具有实际值的占位符。

答案 1 :(得分:5)

不要这样做......很难过。 :)

改为使用MessageFormat

MessageFormat form = new MessageFormat("Transfer {0} from {1} to {2} on {3}");

System.out.println(form.format(new String[] {
        "200.30",
        "Debit Account",
        "Credit Account",
        "2011/01/26"
}));

答案 2 :(得分:0)

API MessageFormat不适用于包含引号的邮件。

例如,您必须使用正则表达式手动完成工作。