Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:将2D字符串数组打印为右对齐的表_Java_Formatting_Printf - Fatal编程技术网

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标记。动态生成的格式字符串。。。拍我的额头…:-)