Java: Print a 2D String array as a right-justified table

安稳与你 提交于 2019-12-14 03:42:31

问题


What is the best way to print the cells of a String[][] array as a right-justified table? For example, the input

{ { "x", "xxx" }, { "yyy", "y" }, { "zz", "zz" } }

should yield the output

  x xxx
yyy   y
 zz  zz

This seems like something that one should be able to accomplish using java.util.Formatter, but it doesn't seem to allow non-constant field widths. The best answer will use some standard method for padding the table cells, not the manual insertion of space characters.


回答1:


Indeed, if you specify a width for the fields, it should be right-justified.
If you need to have a dynamic padding, minimal for the longest string, you have to walk the array, getting the maximal width, generate the format string with the width computed from this maxima, and use it for format the output.




回答2:


Here's an answer, using dynamically-generated format strings for each column:

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]);
    }
  }
}



回答3:


find the length of the longest string..
left pad all the strings with spaces until they r that length + 1
System.out.print them using 2 nested for loops



来源:https://stackoverflow.com/questions/275338/java-print-a-2d-string-array-as-a-right-justified-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!