Java:将2D字符串数组打印为右对齐的表
将Java:将2D字符串数组打印为右对齐的表,java,formatting,printf,Java,Formatting,Printf,将String[][]数组的单元格打印为右对齐表格的最佳方式是什么?例如,输入 { { "x", "xxx" }, { "yyy", "y" }, { "zz", "zz" } } 应该会产生产出 x xxx yyy y zz zz 这似乎是使用java.util.Formatter应该能够完成的事情,但它似乎不允许非恒定的字段宽度。最佳答案是使用一些标准方法填充表格单元格,而不是手动插入空格字符。查找最长字符串的长度。 用空格填充所有字符串,直到它们的长度为r+1 System
String[][]
数组的单元格打印为右对齐表格的最佳方式是什么?例如,输入
{ { "x", "xxx" }, { "yyy", "y" }, { "zz", "zz" } }
应该会产生产出
x xxx
yyy y
zz zz
这似乎是使用
java.util.Formatter
应该能够完成的事情,但它似乎不允许非恒定的字段宽度。最佳答案是使用一些标准方法填充表格单元格,而不是手动插入空格字符。查找最长字符串的长度。用空格填充所有字符串,直到它们的长度为r+1
System.out.使用2个嵌套for循环打印它们实际上,如果为字段指定宽度,则应右对齐。
如果需要动态填充,对于最长的字符串最小,则必须遍历数组,获得最大宽度,使用此最大值计算的宽度生成格式字符串,并将其用于格式化输出。以下是一个答案,为每列使用动态生成的格式字符串:
public static void printTable(String[][] table) {
// Find out what the maximum number of columns is in any row
int maxColumns = 0;
for (int i = 0; i < table.length; i++) {
maxColumns = Math.max(table[i].length, maxColumns);
}
// Find the maximum length of a string in each column
int[] lengths = new int[maxColumns];
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
lengths[j] = Math.max(table[i][j].length(), lengths[j]);
}
}
// Generate a format string for each column
String[] formats = new String[lengths.length];
for (int i = 0; i < lengths.length; i++) {
formats[i] = "%1$" + lengths[i] + "s"
+ (i + 1 == lengths.length ? "\n" : " ");
}
// Print 'em out
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
System.out.printf(formats[j], table[i][j]);
}
}
}
公共静态void打印表(字符串[][]表){
//找出任何行中的最大列数
int maxColumns=0;
对于(int i=0;i
闻起来像家庭作业-问题的措辞就像作业?Stackoverflow是用来提问的。这是订单。如果你想让别人帮你做家庭作业,至少要努力让它看起来不像是你的家庭作业。2) 问题是隐含的:在问题文本前插入“我该怎么做”。你有没有尝试过?你在苦苦挣扎的是哪一部分?@TheSoftwareEdi JDK中的一些类似printf的方法为我做了艰苦的工作,而不是手动篡改空格。可能需要保持每列中最长字符串的长度,但在其他方面足够接近。另外,使用printf做左边的填充-问题用printf标记。动态生成的格式字符串。。。拍我的额头…:-)