Formatted printing in Java

徘徊边缘 提交于 2019-12-22 06:49:48

问题


I have this code:

public String toString(Day day)
{
    String s = day.getDayName() + "    " + day.toString();
    return s;
}

This is Day class's toString method:

public String toString()
{
    String s = "";
    for (Slot slot: slots)
        s += slot.toString();
    return s;
}

When called over and over again it prints:

barbi
 monday    10: X 11:   12:   2:   3:   4:
 tuesday    10:   11:   12:   2:   3:   4: X
 wednesday    10:   11:   12:   2:   3:   4:
 thursday    10:   11:   12:   2:   3:   4:
 friday    10:   11:   12:   2:   3:   4:
    bobbi
 monday    10:   11:   12:   2:   3:   4:
 tuesday    10:   11:   12:   2:   3:   4:
 wednesday    10:   11:   12:   2:   3:   4:
 thursday    10:   11:   12:   2: X 3:   4:
 friday    10:   11:   12:   2:   3:   4:
    bunny
 monday    10:   11:   12:   2:   3:   4:
 tuesday    10:   11:   12:   2:   3:   4:
 wednesday    10:   11:   12:   2:   3:   4:
 thursday    10:   11:   12:   2:   3:   4:
 friday    10:   11:   12:   2:   3:   4:

However, I would like to print it this way:

barbi, income is $95.00
Monday    10:   11:   12: X 2:   3:   4:
Tuesday   10:   11:   12:   2:   3:   4:
Wednesday 10:   11:   12:   2:   3:   4:
Thursday  10:   11:   12:   2:   3:   4:
Friday    10:   11:   12:   2:   3:   4:
bobbi, income is $45.00
Monday    10:   11:   12:   2:   3:   4:
Tuesday   10:   11:   12:   2:   3: X 4:
Wednesday 10:   11:   12:   2:   3:   4:
Thursday  10:   11:   12:   2:   3:   4:
Friday    10:   11:   12:   2:   3:   4:
bunny, income is $0.00
Monday    10:   11:   12:   2:   3:   4:
Tuesday   10:   11:   12:   2:   3:   4:
Wednesday 10:   11:   12:   2:   3:   4:
Thursday  10:   11:   12:   2:   3:   4:
Friday    10:   11:   12:   2:   3:   4:

I know this works with formatted printing in Java. But I have no clue how to do that.


回答1:


You could use String.format(), which will accept widths.

I think you could change:

String s = day.getDayName() + "    " + day.toString();

to:

return String.format("%9s %s", day.getDayName(), day.toString());

And get what you want.




回答2:


This is the job for java.util.Formatter

    String[][] kvs = {
            { "Name", "Johnny" },
            { "Age", "19" },
            { "Sex", "Female" },
    };
    for (String[] kv : kvs) {
        System.out.println(
            String.format("%-10s:%10s", kv[0], kv[1])
        );
    }

This prints:

Name      :    Johnny
Age       :        19
Sex       :    Female

Syntax

%[flags][width]conversion
  • - is the flag for left justification
  • s is the String conversion

On String concatenation

Note that you should never build a String using += in a loop. You should use a StringBuilder instead.

StringBuilder sb = new StringBuilder();
for (Slot slot: slots) {
    sb.append(slot.toString());
}
return sb.toString();

Related questions

  • Difference between string and StringBuilder
  • Why to use StringBuffer in Java instead of the string concatenation operator



回答3:


Have you checked out java.util.Formatter? It's available from 1.5 btw.



来源:https://stackoverflow.com/questions/2825305/formatted-printing-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!