如何在Java中使用String.format()来复制选项卡“\ t”?

我逐行打印数据,希望它像桌子一样组织。

我最初使用firstName + ", " + lastName + "\t" + phoneNumber

但对于一些较大的名字,电话号码被推翻了

我正在尝试使用String.format()来实现此效果。 谁能告诉我要使用的格式语法?

我尝试了String.format("%s, %s, %20s", firstName, lastName, phoneNumber) ,但这不是我想要的。 我希望它看起来像这样:

约翰,史密斯123456789

Bob,Madison 123456789

查尔斯,理查兹123456789

编辑:这些答案似乎适用于System.out.println()。 但是我需要它来为JTextArea工作。 我正在使用textArea.setText()

解决了它。 默认情况下,JTextArea不使用等宽字体。 我使用setFont()来改变它,现在它就像一个魅力。 谢谢大家的解决方案。

考虑使用长度说明符的负数: %-20s 。 例如:

  public static void main(String[] args) { String[] firstNames = {"Pete", "Jon", "Fred"}; String[] lastNames = {"Klein", "Jones", "Flinstone"}; String phoneNumber = "555-123-4567"; for (int i = 0; i < firstNames.length; i++) { String foo = String.format("%-20s %s", lastNames[i] + ", " + firstNames[i], phoneNumber); System.out.println(foo); } } 

回报

 Klein, Pete 555-123-4567 Jones, Jon 555-123-4567 Flinstone, Fred 555-123-4567 

尝试将宽度放入第二个占位符,并使用-标记右边填充

  String.format("%s, %-20s %s", firstName, lastName, phoneNumber) 

这将指定宽度为第二个参数(姓氏),右边填充,电话号码将仅在指定的宽度字符串后面开始。

编辑:演示:

 String firstName = "John"; String lastName = "Smith"; String phoneNumber = "1234456677"; System.out.println(String.format("%s, %-20s %s",firstName, lastName, phoneNumber)); 

打印:

约翰,史密斯1234456677

唯一的选择是循环名称列表,计算字符串的最大长度,并在每个名称后根据需要添加空格,以确保所有数字都在同一列开始。

使用制表符有一种不足之处,即您无法a priori知道a priori多少空格等同于制表符,因为它取决于编辑器。