java中的自定义转换说明符
我希望我的数据结构是自定义格式的。 e、 我有一个问题java中的自定义转换说明符,java,format,Java,Format,我希望我的数据结构是自定义格式的。 e、 我有一个问题 Address { string house_number, string street, string city, long pin_code, } 现在,我想将某些转换说明符与这些字段中的每个字段相关联 e.g. house_number -> H street -> S, city -> C, pin_code -> P ... 所以像
Address {
string house_number,
string street,
string city,
long pin_code,
}
现在,我想将某些转换说明符与这些字段中的每个字段相关联
e.g. house_number -> H
street -> S,
city -> C,
pin_code -> P
...
所以像
myPrintWriter.printf("Mr A lives in %C", address_instance)
产生“A先生住在波士顿”(如果地址=波士顿)等
似乎没有简单的方法可以做到这一点。格式化程序似乎是最终的。它提供的唯一自定义是通过接口Formattable,但这仅有助于自定义“s”转换说明符。
有没有办法添加我们的自定义转换说明符?任何帮助都将不胜感激
谢谢,我相信您需要编写自己的格式化程序,它可以按照您想要的方式工作 似乎没有简单的方法可以做到这一点。格式化程序似乎是最终的 没错,但你仍然可以使用构图。我会做如下的事情:
class ExtendedFormatter {
private Formatter defaultFormatter;
// provide the same methods like the normal Formatter and pipe them through
// ...
// then provide your custom method, or hijack one of the existing ones
// to extend it with the functionality you want
// ...
public Formatter format(String format, Object... args) {
// extract format specifiers from string
// loop through and get value from param array
ExtendedFormattable eft = (ExtendedFormattable)args1;
String specifierResult = eft.toFormat(formatSpecifier); // %C would return city
// use specifierResult for the just queried formatSpecifier in your result string
}
}
困难的部分是知道如何将不同的格式说明符附加到要输出的字段。我能想到的第一种方法是提供您自己的ExtendedFormattable
接口,每个应该与ExtendedFormatter
一起使用的类都可以实现该接口,并为您的自定义格式说明符返回相应的值。这可能是:
class Address implements ExtendedFormattable {
public String toFormat(String formatSpecifier) { // just an very simple signature example
// your custom return values here ...
}
}
还有注释,但我认为这不是一个非常可行的方法
示例调用如下所示:
ExtendedFormatter ef = new ExtendedFormatter();
ef.format("Mr A lives in %C", address_instance);
从ExtendedFormatter中使用ExtendedFormattable似乎相当困难。你有什么特别的想法吗?