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

2022-09-02 09:16:46

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

我最初使用.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()来改变它,现在它就像一个魅力。谢谢大家的解决方案。


答案 1

请考虑对长度说明符使用负数:。例如:%-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

答案 2

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

  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