问题
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 justificationsis theStringconversion
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