首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用excel将图表格式化为任意长度字符串的最佳方法

不使用excel将图表格式化为任意长度字符串的最佳方法
EN

Stack Overflow用户
提问于 2018-11-19 22:03:19
回答 1查看 32关注 0票数 1

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

public static final String FORMAT = "%s\t%s,%s\t%s%n";

代码语言:javascript
复制
public static void print() {
    for(int i = 0; i < n; i++)
        System.out.printf(FORMAT, name[i], last[i], first[i], formatName[i]);

产出:

代码语言:javascript
复制
Nirvana Narayan Narayan,Nirvana Nirvana--Narayan
Kim Do  Do,Kim  Kim--Do
Kiri Wood   Wood,Kiri   Kiri--Wood
Quinn Hume  Hume,Quinn  Quinn--Hume
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-19 22:30:57

As described by KaeptnNemo in a comment

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

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

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

代码语言:javascript
复制
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);

输出

代码语言:javascript
复制
Nirvana Narayan Narayan Nirvana Nirvana--Narayan
Kim Do  Do              Kim  Kim--Do
Kiri Wood   Wood        Kiri   Kiri--Wood
Quinn Hume  Hume        Quinn  Quinn--Hume

如果您愿意,您甚至可以添加列分隔符。

代码语言:javascript
复制
// 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();

输出

代码语言:javascript
复制
| Nirvana Narayan Narayan | Nirvana Nirvana--Narayan |
| Kim Do  Do              | Kim  Kim--Do             |
| Kiri Wood   Wood        | Kiri   Kiri--Wood        |
| Quinn Hume  Hume        | Quinn  Quinn--Hume       |
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53383282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档