Java';s字符串/数字/货币格式化功能
有没有更容易的方法来理解java中的多种格式化方式是如何相互关联的?我对以下几点感到困惑:Java';s字符串/数字/货币格式化功能,java,string,formatting,Java,String,Formatting,有没有更容易的方法来理解java中的多种格式化方式是如何相互关联的?我对以下几点感到困惑: System.out.printf() System.out.format() String.format() System.console.format() new Formatter(new StringBuffer("Test")).format(); DecimalFormat.format(value); NumberFormat.format(value); 上面的类/方法在任何情况下都是相
System.out.printf()
System.out.format()
String.format()
System.console.format()
new Formatter(new StringBuffer("Test")).format();
DecimalFormat.format(value);
NumberFormat.format(value);
上面的类/方法在任何情况下都是相关的吗?理解差异的最佳方式是什么?在何种情况下使用哪种方式
例如,System.out.printf
、System.out.format
和String.format
都使用相同的语法和格式标志。我看不出他们三个人有什么不同
谢谢
< p>我会考虑下载JavaDoc和源JAR,用于你相应的java版本,因为所有的问题都可以通过查看源代码和文档来轻松地回答。System.out.printf(formatString, args)
System.out
是一个PrintStream.printf(formatString,args)
实际上是对PrintStream.format(formatString,args)的一种方便的方法调用代码>
这是对PrintStream.format(formatString,args)
的调用,它使用a来格式化结果并将其附加到PrintStream
String.format(formatString, args)
此方法还使用格式化程序
,并返回一个新字符串,其中包含格式化字符串和参数的格式化结果
System.console().format(formatString, args)
System.console()
是一个<代码>控制台。格式化(format,args)
使用格式化程序
向控制台显示格式化字符串
new Formatter(new StringBuffer("Test")).format(formatString, args);
这将使用传入的字符串缓冲区创建的实例。如果使用此调用,则必须使用out()
方法获取格式化程序写入的可追加的。相反,您可能希望执行以下操作:
StringBuffer sb = new StringBuffer("Test");
new Formatter(sb).format(formatString, args);
// now do something with sb.toString()
最后:
DecimalFormat.format(value);
NumberFormat.format(value);
这是两个用于不使用格式化程序
类的数字的concreate格式化程序。它们都有一个format
方法,该方法接受一个双精度或数字
,并根据这些类的定义将它们格式化为字符串。据我所知,格式化程序不使用它们
希望这有帮助。它们只是包装格式化程序功能的方便方法。(不确定NumberFormat
及其子类如何与之关联,即关系的流向。)@Dave但仍然是一个很好的问题,为什么我们有PrintStream.format
和PrintStream.printf
-afaik它们是在同一版本中添加的,并且具有相同的功能。printf的jdocs甚至声明:此表单out.printf方法的调用(format,args)的行为与调用out.format(format,args)的行为完全相同。
。奇怪的怀疑really@Voo我猜有人添加了所有的printf
内容,以使格式
功能更符合print
/println
等,但这只是一个猜测。由于各种原因,大多数API都有一定程度的重复——允许不同的风格,以不同的方式传达意图,等等。@Dave Yeah,我想这里没有深刻的神秘解释,所以这只是一个意见问题。就我个人而言,我试图在我的API中完全避免这些事情——引用Python的禅宗,应该有一种——最好只有一种——显而易见的方法来做到这一点。
。至少javadoc清楚地表明它们是相同的,所以没有人会想“区别在哪里?”(至少没有人读过文档)类似于
DecimalFormat.format(value);
NumberFormat.format(value);