如何在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
多少空格等同于制表符,因为它取决于编辑器。