我正在逐行打印数据,并希望它像桌子一样进行组织。
我最初使用firstName + ", " + lastName + "\t" + phoneNumber
。
但是对于一些较大的名字,电话号码被推离了对齐
我正在尝试使用String.format()来实现此效果。谁能告诉我要使用的格式语法?
我试过String.format("%s, %s, %20s", firstName, lastName, phoneNumber)
,但这不是我想要的。我希望它看起来像这样:
约翰,史密斯123456789
鲍勃,麦迪逊123456789Charles,Richards 123456789
编辑: 这些答案似乎适用于System.out.println()。但我需要它为JTextArea工作。我正在使用textArea.setText()
解决了这个问题。默认情况下,JTextArea不使用等宽字体。我使用setFont()来改变它,现在它就像一个魅力。谢谢大家的解决方案。
答案 0 :(得分:19)
考虑为您的长度说明符使用负数:%-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
答案 1 :(得分:9)
尝试将宽度放入第二个占位符,并使用-
符号进行右边填充:
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
答案 2 :(得分:0)
唯一的选择是循环名称列表,计算字符串的最大长度,并在每个名称后根据需要添加空格,以确保所有数字都从同一列开始。
使用制表符会让您无法知道a priori
有多少空白等同于制表符,因为它取决于编辑器。