我试图为我的名字创建一个图表,但如果名称太短或太长,它就不能正确对齐。我想知道是否有办法使名称对齐,而不管字符串的长度如何。下面是我使用的对齐方法
public static final String FORMAT = "%s\t%s,%s\t%s%n";
public static void print() {
for(int i = 0; i < n; i++)
System.out.printf(FORMAT, name[i], last[i], first[i], formatName[i]);产出:
Nirvana Narayan Narayan,Nirvana Nirvana--Narayan
Kim Do Do,Kim Kim--Do
Kiri Wood Wood,Kiri Kiri--Wood
Quinn Hume Hume,Quinn Quinn--Hume发布于 2018-11-19 22:30:57
As described by KaeptnNemo in a comment
使用
.length,取最大值,打印短字符串缺少的空格。
打印缺少空格的最简单方法是使用格式字符串使用printf方法,例如使用%-10s格式打印至少10个字符,左对齐,根据需要填充空格。
例如,由于第一列的最长文本为23,因此可以使用格式字符串(如"%-23s %s%n" )。现在只需编写代码来自动生成格式字符串:
String[][] input = { { "Nirvana Narayan Narayan", "Nirvana Nirvana--Narayan" },
{ "Kim Do Do", "Kim Kim--Do" },
{ "Kiri Wood Wood", "Kiri Kiri--Wood" },
{ "Quinn Hume Hume", "Quinn Quinn--Hume" } };
// Find column widths
int[] widths = new int[input[0].length];
for (String[] row : input)
for (int i = 0; i < widths.length; i++)
widths[i] = Math.max(widths[i], row[i].length());
// Build format string
StringBuilder buf = new StringBuilder();
for (int i = 0; i < widths.length - 1; i++)
buf.append("%-").append(widths[i]).append("s ");
String fmt = buf.append("%s%n").toString();
// Print table
for (String[] row : input)
System.out.printf(fmt, (Object[]) row);输出
Nirvana Narayan Narayan Nirvana Nirvana--Narayan
Kim Do Do Kim Kim--Do
Kiri Wood Wood Kiri Kiri--Wood
Quinn Hume Hume Quinn Quinn--Hume如果您愿意,您甚至可以添加列分隔符。
// Build format string
StringBuilder buf = new StringBuilder("|");
for (int i = 0; i < widths.length; i++)
buf.append(" %-").append(widths[i]).append("s |");
String fmt = buf.append("%n").toString();输出
| Nirvana Narayan Narayan | Nirvana Nirvana--Narayan |
| Kim Do Do | Kim Kim--Do |
| Kiri Wood Wood | Kiri Kiri--Wood |
| Quinn Hume Hume | Quinn Quinn--Hume |https://stackoverflow.com/questions/53383282
复制相似问题