Java:将二维字符串数组打印为右对齐表

标签 java formatting printf

打印 String[][] 的单元格的最佳方法是什么?数组作为右对齐表?例如,输入

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

应该产生输出
  x xxx
yyy   y
 zz  zz

这似乎是使用 java.util.Formatter 应该能够完成的事情。 ,但它似乎不允许非常数的字段宽度。最佳答案将使用一些标准方法来填充表格单元格,而不是手动插入空格字符。

最佳答案

这是一个答案,对每列使用动态生成的格式字符串:

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

关于Java:将二维字符串数组打印为右对齐表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/275338/

相关文章:

c - 格式 '%s' 需要类型为 'char *' 的参数,但参数 3 在 fprintf 中具有类型 'int' [-Wformat]

java - Struts2 记住我

java - JSF 查看范围 : How to Check if an object is in the view tree

java - StringBuffer 和appender 方法

php - 当我们有 2 个或更多选项时如何在 php 中格式化文本

c - fprintf 未写入文件

java - 根据API版本加载特定的Android库

sql-server - SSMS 结果到网格 - CRLF 未保留在复制/粘贴中 - 有更好的技术吗?

php - 在 PHP 中从 SQL 格式化时间戳的最简单方法是什么?

c - 为什么即使文件存在并且正确打开和关闭, fprintf() 也不打印任何内容?