我正在寻找一种类似于标准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()
如果你的格式有错误(好吧,存在拼写错误),它会尽力填写绑定变量,或者返回原始格式字符串。
答案 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表示字符串格式。