首页 > 解决方案 > 不使用 excel 为任何长度的字符串格式化图表的最佳方法

问题描述

我正在尝试为我的名字创建一个图表,但如果名字太短或太长,它就无法正确对齐。我想知道无论字符串的长度如何,是否有办法对齐名称。下面是我使用的对齐方法

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

标签: javastring

解决方案


正如KaeptnNemo 在评论中所述

使用.length,取最大值并打印较短字符串的缺失空格。

打印缺失空格的最简单方法是使用printf格式字符串的方法,例如%-10s打印至少 10 个字符的格式,左对齐,根据需要填充空格。

"%-23s %s%n"例如,由于第一列的最长文本是 23,因此可以使用格式字符串,例如。现在只需编写代码来自动构建格式字符串:

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       |

推荐阅读