在字符串中格式化

时间:2013-11-25 22:29:17

标签: java format

在方法中,我有以下代码:

s = s + (items[i] + ":" + numItems[i]+" @ "+prices[i]+" cents each.\n");

哪个输出:

Candy:      5 @ 50 cents each.
Soda:     3 @ 10 cents each.

等等。 。 。

在这一行中,我如何获得5,3等。 。彼此排列,以便:

Candy:      5 @ 50 cents each.
Soda:       3 @ 10 cents each.

这是toString()方法的一部分,因此我无法使用System.out.printf

进行此操作

4 个答案:

答案 0 :(得分:1)

可以使用String.format()和Formatter类。

以下代码将输出类似

的内容
 /*
 Sample Text    #
     Sample Text#
 */

代码

 public static String padRight(String s, int n) {
    return String.format("%1$-" + n + "s", s);  
 }

 public static String padLeft(String s, int n) {
     return String.format("%1$" + n + "s", s);  
 }

 public static void main(String args[]) throws Exception {
    System.out.println(padRight("Sample Text", 15) + "#");
    System.out.println(padLeft("Sample Text", 15) + "#");
 }

一些格式化代码片段

 String.format("%5s", "Hi").replace(' ', '*');
 String.format("%-5s", "Bye").replace(' ', '*');
 String.format("%5s", ">5 chars").replace(' ', '*');

输出:

 ***Hi
 Bye**
 >5*chars

除了这个Apache StringUtils API有很多方法,比如rightPad,leftPad这样做。 Link

答案 1 :(得分:0)

您可以在toString()

中使用制表符\t

以下是一个例子:

System.out.println("Candy \t 5");
System.out.println("Soda \t 10");

Candy    5
Soda     10

所以在你的情况下

s = s + (items[i] + ": \t" + numItems[i]+" @ "+prices[i]+" cents each.\n");

答案 2 :(得分:0)

您可以使用\ t来插入标签。

答案 3 :(得分:0)

试试这个

s = s + (makeFixedLengthString(items[i]) + ":" + numItems[i]+" @ "+prices[i]+" cents each.\n");

public String makeFixedLengthString(String src){
        int len = 15;
        for(int i = len-src.length(); i < len; i++)
            src+=" ";
        return src;
}