Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用printf函数来组织列?_Java_Printf_Stringbuilder - Fatal编程技术网

Java 如何使用printf函数来组织列?

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 )

我正在尝试用java打印一个项目的发票报告,但在格式化表单时遇到了问题。这就是我遇到问题的代码

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