智能Java格式化程序

时间:2010-01-27 20:31:16

标签: java formatter

我正在寻找一种类似于标准Formatter的智能Java String格式化程序:

    StringBuffer buffer = new StringBuffer();
    Formatter formatter = new Formatter(buffer);
    formatter.format("hello %1$s, %2$s and %3$s", "me", "myself", "I");

问题在于,如果您在格式中出错(例如,您忘记了$s),则会抛出异常。格式化错误消息时不是我想要的(因为它不在应用程序的常规路径中,可能无法测试)。

我当然可以定义我自己的类,假设接受像"hello $1, $2 and $3这样的字符串,用($1 - > %1$s替换,并调用{{1}对于所有参数,但我确信已经开发出了更好的解决方案。

某处,在某个罐子里......

感谢任何有用的指针。

修改

我正在寻找以下内容:

toString()

如果你的格式有错误(好吧,存在拼写错误),它会尽力填写绑定变量,或者返回原始格式字符串。

3 个答案:

答案 0 :(得分:3)

有时答案就在那里......

import static java.text.MessageFormat.format;

String out = format("hello {0}, {1} and {2}", "me", "myself", "2", "3");

是的,Anon,显然Sun认为所有程序员都懒惰。

答案 1 :(得分:2)

  

问题是如果你在格式中犯了错误(例如你忘了$ s​​),就会抛出异常。格式化错误消息时不是我想要的(因为它不在应用程序的常规路径中,可能无法测试)。

所以你基本上问“如果我没有测试我的代码,那就错了,我可以使用什么来隐藏它而不必处理它?”

解决方案是正确测试您的所有代码。当你写它时,最好是。

如果您坚持要掩盖不良代码并假装它不存在,您可以执行以下操作:

public class LazyProgrammersFormatter {
    private Formatter _f;

    public LazyProgrammersFormatter(Formatter f) {
        _f = f;
    }

    public bool format(/*can't be bothered looking up the varargs signature, you know what it is*/) {
        try {
            _f.format(/*etc.*/);
            return true;
        } catch (FormatException e) {
            return false;
        }
    }
}

答案 2 :(得分:1)

String.format不适合你要找的东西吗? Java doc表示字符串格式。