20

我正在逐行打印数据,并希望它像表格一样组织。

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

但是对于一些较大的名字,电话号码会被推错

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

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

约翰·史密斯 123456789

麦迪逊鲍勃 123456789

查尔斯·理查兹 123456789

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

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

4

3 回答 3

27

考虑为您的长度说明符使用负数:%-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
于 2012-12-09T16:12:46.940 回答
11

尝试将宽度放入带有-右填充符号的第二个占位符,如下所示:

  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

于 2012-12-09T16:14:10.817 回答
0

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

使用制表符的缺点是您无法知道a priori有多少个空格相当于一个制表符,因为它取决于编辑器。

于 2012-12-09T16:14:59.833 回答