Java 如何使用printf函数来组织列?
我正在尝试用java打印一个项目的发票报告,但在格式化表单时遇到了问题。这就是我遇到问题的代码Java 如何使用printf函数来组织列?,java,printf,stringbuilder,Java,Printf,Stringbuilder,我正在尝试用java打印一个项目的发票报告,但在格式化表单时遇到了问题。这就是我遇到问题的代码 StringBuilder sb = new StringBuilder(); sb.append(String.format("%s%s%-82s%s%10.2f%s","DISCOUNT ( ","Placeholder"," )", "$", 99.99, "\n")); 它打印了这个 DISCOUNT ( Placeholder )
StringBuilder sb = new StringBuilder();
sb.append(String.format("%s%s%-82s%s%10.2f%s","DISCOUNT ( ","Placeholder"," )", "$", 99.99, "\n"));
它打印了这个
DISCOUNT ( Placeholder ) $ 99.99
如果我更改单词占位符的字符长度,$99.99列也会随之移动
DISCOUNT ( p ) $ 99.99
代码需要做的是,无论单词占位符是替换为10个字符长的单词还是替换为1个字符长的单词,$99.99都需要保留在相同的位置,以便在打印时它位于正确的列中。我试图修改$s的%s,但如果占位符更改,它似乎仍在移动。建议?您可以尝试使用宽度参数。 这里的宽度是15:
System.out.printf("%s%15s%-82s%s%10.2f%s", "DISCOUNT ( ", "Placeholder", " )", "$", 99.99, "\n");
但不确定String.format是否使用与printf完全相同的语法
输出将是:
DISCOUNT ( Placeholder ) $ 99,99
DISCOUNT ( p ) $ 99,99
您可以通过从特定值减去占位符的长度来计算格式的长度
private static String placeHolder = "";
private static int value;
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
setPlaceHolder("");
sb.append(String.format("%s%s%-"+value+"s%s%10.2f%s","DISCOUNT ( ",placeHolder," )", "$", 99.99, "\n"));
setPlaceHolder("Placeholder");
sb.append(String.format("%s%s%-"+value+"s%s%10.2f%s","DISCOUNT ( ",placeHolder," )", "$", 99.99, "\n"));
setPlaceHolder("This is quite some long text");
sb.append(String.format("%s%s%-"+value+"s%s%10.2f%s","DISCOUNT ( ",placeHolder," )", "$", 99.99, "\n"));
System.out.println(sb);
}
private static void setPlaceHolder(String placeholder) {
placeHolder = placeholder;
value = 83 - placeholder.length();
}
输出
DISCOUNT ( ) $ 99,99
DISCOUNT ( Placeholder ) $ 99,99
DISCOUNT ( This is quite some long text ) $ 99,99