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

如何在Java中使用String.format()复制选项卡\t";?,java,syntax,tabs,format,Java,Syntax,Tabs,Format,我正在逐行打印数据,希望它像表格一样组织起来 我最初使用的是firstName+,“+lastName+”\t“+phoneNumber 但是,对于一些较大的名字,电话号码被推到了不一致的位置 我试图使用String.format()来实现这个效果。有人能告诉我要使用的格式语法吗 我尝试了String.format(“%s,%s,%20s”,firstName,lastName,phoneNumber),但这不是我想要的。我希望它看起来像这样: 约翰,史密斯123456789 鲍勃,麦迪逊123

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

我最初使用的是
firstName+,“+lastName+”\t“+phoneNumber

但是,对于一些较大的名字,电话号码被推到了不一致的位置

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

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

约翰,史密斯123456789

鲍勃,麦迪逊123456789

查尔斯,理查兹123456789

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


解决了。默认情况下,JTextArea不使用单间距字体。我用setFont()来改变这一点,现在它就像一个符咒。感谢大家提供的解决方案。

考虑使用负数作为长度说明符:
%-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);
      }   
   }

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

  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个字符开始。但是,名称本身取决于名字的长度。@问问你的确切意思是什么?对于firstName=
John
lastName=
Smith
和phoneNumber as
1234456677
,它会打印:
John,Smith 1234456677
。with for last name字段的长度为20个字符,因此我看到在
Smith
之后和电话号码之前出现了15个空格。我用一个示例演示更新了答案。如果你想找点别的,请告诉我。谢谢。它适用于System.out.println()。但当我将此文本设置为文本区域时,它不起作用。@问:很好奇,你发现这个答案和另一个答案有什么不同,你接受了吗?谢谢。你的也一样。但他在你之前半分钟发布了正确的解决方案。我很抱歉。但我投票支持你的答案。出于某种原因,这对JTextAreas不起作用。知道为什么吗?我知道了。它必须是等距字体。@ask:确实如此。您最好使用一个简单的JTable来显示数据。我知道。这是一个作业,他们强迫我使用文本区域。但我想让它看起来漂亮点。
String firstName = "John";
String lastName = "Smith";
String phoneNumber = "1234456677";
System.out.println(String.format("%s, %-20s %s",firstName, lastName, phoneNumber));