繁体   English   中英

Java Formattable接口和printf参数

[英]Java Formattable Interface and printf parameters

我正在类中实现Formattable接口的formatTo()方法。 然后将其与printf()参数一起使用,如下所示:

public static void main(String[] args)
{
        BankAccount1 bankAccount = new BankAccount1(1234.12) ;

        //Don't understand this code
        System.out.printf("%s %10S.\n", "Balance = ", bankAccount) ;
}
class BankAccount implements Formattable
{

    public void formatTo(Formatter formatter, int flags, int width, int precision)
    {

        Appendable appendable = formatter.out() ;
        String balanceString = "" + balance ;


        for (int i = balanceString.length() ; i < width ; i++)
        balanceString = "$" + balanceString ;

        try {

            //tells appendable to append balanceString to printf's string
            appendable.append(balanceString) ;

        }
        catch (IOException e) {
            System.exit(0) ;
        }

    }
}

输出为:

Balance =  $$$1234.12.

我的问题是在线上:

System.out.printf("%s %10S.\n", "Balance = ", bankAccount) ;

我知道%s是字符串,但是“%10S。\\ n”在做什么? 此外,在“%10S。\\ n”中,为什么“%10S”为何大写S,它代表什么?

在这里, BankAccount Class具有实现Formattable interface

现在,

printf的语法看起来也一样,

%[argument_index$][flags][width][.precision]conversion

现在,让我详细说明一下

%10表示输出的总width将为10。 (in java, string length = 10)

现在以S或s的方式

如果参数arg为null,则结果为“ null”。 如果arg实现Formattable,则调用arg.formatTo。 否则,通过调用arg.toString()获得结果。

最后结束于. 这将反映为。(点)的输出

所以最后,输出: $$$1234.12. 长度为10长度( $$$1234.12 ),且点号结束。

在这里,有趣的是S-它将调用BankAccount的formatTo,如上所述。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM