Java 格式化程序-显示奇怪的输出
我尝试使用Java 格式化程序-显示奇怪的输出,java,output,formatter,Java,Output,Formatter,我尝试使用java.util.Formatter类的简单示例 在我看来,它的工作原理与System.out.printf()完全相同 但是我的easy程序显示了意想不到的结果 中小企业能否解释原因 应为字段名的单行处,以及该值的值 代码: 输出: 为什么我们可以在这里看到重复的线条,其中一些是不正确的 有什么问题以及如何正确使用格式化程序?试试看 package com.linkage.test; import java.util.Formatter; import java.util.Loc
java.util.Formatter
类的简单示例
在我看来,它的工作原理与System.out.printf()完全相同
但是我的easy程序显示了意想不到的结果
中小企业能否解释原因
应为字段名的单行处,以及该值的值
代码:
输出:
为什么我们可以在这里看到重复的线条,其中一些是不正确的
有什么问题以及如何正确使用格式化程序?试试看
package com.linkage.test;
import java.util.Formatter;
import java.util.Locale;
class DataHolder {
int i = 145;
long l = 789L;
float f = 78.8F;
double d = 34.9;
public String toString() {
StringBuilder sb = new StringBuilder("DataHolder class: \n\n");
Formatter formatter = new Formatter(Locale.US);
sb.append(formatter.format("int field: %d\n", i));
//this new object Formatter
formatter = new Formatter(Locale.US);
sb.append(formatter.format("long field: %d\n", l));
//this new object Formatter
formatter = new Formatter(Locale.US);
sb.append(formatter.format("float field: %f\n", f));
//this new object Formatter
formatter = new Formatter(Locale.US);
sb.append(formatter.format("double field: %f\n", d));
return sb.toString();
}
}
试试看
package com.linkage.test;
import java.util.Formatter;
import java.util.Locale;
class DataHolder {
int i = 145;
long l = 789L;
float f = 78.8F;
double d = 34.9;
public String toString() {
StringBuilder sb = new StringBuilder("DataHolder class: \n\n");
Formatter formatter = new Formatter(Locale.US);
sb.append(formatter.format("int field: %d\n", i));
//this new object Formatter
formatter = new Formatter(Locale.US);
sb.append(formatter.format("long field: %d\n", l));
//this new object Formatter
formatter = new Formatter(Locale.US);
sb.append(formatter.format("float field: %f\n", f));
//this new object Formatter
formatter = new Formatter(Locale.US);
sb.append(formatter.format("double field: %f\n", d));
return sb.toString();
}
}
每次调用format时,它都会附加给定的字符串,然后将其附加到StringBuffer。所以在第一次调用之后,格式化程序将包含
int field: %d\n
第二次呼叫后:
int field: 145
long field: 789
等等
因此,最好将formatter用作字符串缓冲区,并使用just to make to String:
formatter.format("int field: %d\n", i);
formatter.format("long field: %d\n", l);
formatter.format("float field: %f\n", f);
formatter.format("double field: %f\n", d);
每次调用format时,它都会附加给定的字符串,然后将其附加到StringBuffer。所以在第一次调用之后,格式化程序将包含
int field: %d\n
第二次呼叫后:
int field: 145
long field: 789
等等
因此,最好将formatter用作字符串缓冲区,并使用just to make to String:
formatter.format("int field: %d\n", i);
formatter.format("long field: %d\n", l);
formatter.format("float field: %f\n", f);
formatter.format("double field: %f\n", d);
来自JavaDoc
使用指定的格式字符串和参数将格式化字符串写入此对象的目标
因此,您将内容附加到格式化程序,并一次又一次地调用其toString(),这就是为什么您会看到:
- 附加1:int
- 附加2:int,long
- 附加3:int、long、float
- 附加4:
int、long、float、double
您应该做的是将StringBuilder作为参数传递给格式化程序,然后在最后打印StringBuilder
希望有帮助。来自JavaDoc
使用指定的格式字符串和参数将格式化字符串写入此对象的目标
因此,您将内容附加到格式化程序,并一次又一次地调用其toString(),这就是为什么您会看到:
- 附加1:int
- 附加2:int,long
- 附加3:int、long、float
- 附加4:
int、long、float、double
您应该做的是将StringBuilder作为参数传递给格式化程序,然后在最后打印StringBuilder
希望能有所帮助。更好的方法是使用sb.append(新的格式化程序(Locale.US).format(“int字段:%d\n”,i))代码>用于每个字段。更好的方法是使用sb.append(新格式化程序(Locale.US).format(“int字段:%d\n”,i))代码>针对每个字段。