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

时间:2012-12-09 16:10:38

标签: java syntax tabs format

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

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

但是对于一些较大的名字,电话号码被推离了对齐

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

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

约翰,史密斯123456789

鲍勃,麦迪逊123456789

Charles,Richards 123456789

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

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

3 个答案:

答案 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有多少空白等同于制表符,因为它取决于编辑器。