如何在Java中使用String.format()来复制制表符"\t"?

21

我正在逐行打印数据,并希望以表格形式组织它。

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

但对于一些较大的姓名,电话号码会被推出对齐。

我试图使用String.format()来实现这个效果。有人能告诉我要使用的格式语法吗?

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

John, Smith            123456789

Bob, Madison         123456789

Charles, Richards  123456789

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

解决了。JTextArea默认不使用等宽字体。我使用setFont()来更改它,现在它像魅力一样工作。感谢所有的解决方案。

3个回答

32

考虑使用负数来指定长度:%-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

这个方法在某些情况下不适用于JTextAreas。你有什么想法为什么会这样? - ask
2
发现需要使用等宽字体。 - ask
1
@ask: 的确。你可能最好使用一个简单的JTable来显示数据。 - Hovercraft Full Of Eels
2
我知道。这是一个任务,他们强制我使用文本区域。但我正在尝试使它看起来漂亮。 - ask

12

尝试将 宽度- 符号放在第二个占位符中,以实现右边距填充:

将宽度与 - 符号连用可在第二个占位符中实现右边距填充:

  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


无法正常工作。这会使电话号码在“,”后面的第30个字符开始。但是,“,”本身取决于名字的长度。 - ask
1
@ask 你具体是什么意思?对于firstName = John lastName = Smith 和phoneNumber为1234456677,它会打印出:John, Smith 1234456677。姓氏字段的长度被分配为20个字符,所以我看到在电话号码之前的Smith后面有15个空格。我更新了答案并提供了一个示例演示。如果您需要其他内容,请告诉我。 - Yogendra Singh
谢谢。对于 System.out.println() 它可以正常工作。但是当我将这个文本设置到文本区域时,它无法正常工作。 - ask
@ask:只是好奇,您在这个答案和其他被采纳的答案中发现了什么区别? - Yogendra Singh
@ask:这样也可以。我只是想知道你是否注意到了任何不同或更喜欢连接操作 :) - Yogendra Singh

0
唯一的替代方案是循环名称列表,计算字符串的最大长度,并在每个名称后根据需要添加空格,以确保所有数字都从同一列开始。
使用制表符的缺点是您无法事先知道多少空格等效于一个制表符,因为它取决于编辑器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接