使用printf对齐表格中的数字和标题

时间:2014-04-09 03:29:46

标签: java formatting printf

我从来没有正确理解printf是如何工作的,并且可以真正使用一些格式化帮助。我希望我的打印输出看起来像这样:

Student     Correct      Incorrect
   1           3             7
   2           4             6
   3           8             2

等等。我只是无法找到格式化printf语句的正确方法来实现这一目标。这就是我所说的声明:

System.out.println ((studentAns.indexOf(ans) + 1) + "\t" + correct + "\t" + incorrect);

这就是我对标题的看法:

for (String heading : headings)                
  {
     System.out.printf ("%8s\t", heading);
  }

它尽可能保持间距,但不与标题对齐。新程序员在这里 - 非常感谢您的所有帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

这是一种在表格中对齐事物的方法,

// This will create a String of `i` spaces.
private static String getSpaces(int i) {
  StringBuilder sb = new StringBuilder();
  for (int t = 0; t < i; t++) {
    sb.append(' ');
  }
  return sb.toString();
}

public static void main(String[] args) {
  String[] heading = new String[] { "Student",
      "Correct", "Incorrect" };
  int[][] data = new int[][] {
      new int[] { 1, 3, 7 }, new int[] { 2, 4, 6 },
      new int[] { 3, 8, 2 } };
  System.out.printf("%10s %10s %10s\n", heading[0],
      heading[1], heading[2]);
  for (int[] arr : data) {
    // Shift each data element right by the half the heading string length
    System.out.printf("%10s %10s %10s\n",
        String.valueOf(arr[0])
            + getSpaces(heading[0].length() / 2),
        String.valueOf(arr[1])
            + getSpaces(heading[1].length() / 2),
        String.valueOf(arr[2])
            + getSpaces(heading[2].length() / 2));
  }
}

输出

 Student    Correct  Incorrect
    1          3         7    
    2          4         6    
    3          8         2