0

我正在寻找类似于标准格式化程序的智能 Java 字符串格式化程序:

    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$stoString()

在某个地方,在某个罐子里……

感谢您提供任何有用的指针。

编辑

我正在寻找类似以下的东西:

String out = MySpecialFormatter.format("hello $1, $2 and $3", "me", "myself", "I");

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

4

3 回答 3

3

有时答案就在那里...

import static java.text.MessageFormat.format;

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

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

于 2010-01-27T21:13:23.037 回答
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;
        }
    }
}
于 2010-01-27T20:39:44.697 回答
1

String.format 不适合您要查找的内容吗?用于字符串格式的Java 文档。

于 2010-01-27T20:40:38.080 回答