2015-10-15 33 views
0

我试图打印出一个项目在java中的发票报告,但我无法格式化工作表。这是我遇到问题的代码。如何在保持列组织的同时使用printf函数?

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,但它似乎仍然移动,如果占位符更改。建议吗?

回答

0

您可以尝试宽度参数。
像这样(15是这里的宽度):如果使用的String.format完全相同的语法如printf虽然

System.out.printf("%s%15s%-82s%s%10.2f%s", "DISCOUNT (", "Placeholder", ")", "$", 99.99, "\n"); 

不知道。

输出将是:

DISCOUNT ( Placeholder)           $  99,99 
DISCOUNT (    p)           $  99,99 
0

你可以只通过一个特定的值减去占位符的长度计算格式的长度。

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 
相关问题