java中的自定义转换说明符

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 ... 所以像

我希望我的数据结构是自定义格式的。 e、 我有一个问题

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似乎相当困难。你有什么特别的想法吗?