How to use String.format() in Java to replicate tab “\t”?

无人久伴 提交于 2019-12-18 03:17:17

问题


I'm printing data line by line and want it to be organized like a table.

I initially used firstName + ", " + lastName + "\t" + phoneNumber.

But for some of the larger names, the phone number gets pushed out of alignment

I'm trying to use String.format() to achieve this effect. Can anyone tell me the format syntax to use?

I tried String.format("%s, %s, %20s", firstName, lastName, phoneNumber), but that's not what I want. I want it to look like this:

John, Smith            123456789

Bob, Madison         123456789

Charles, Richards  123456789

Edit: These answers seem to work for System.out.println(). But I need it to work for a JTextArea. I'm using textArea.setText()

Worked it out. JTextArea doesn't use monospaced fonts by default. I used setFont() to change that, and now it works like a charm. Thank you all for the solutions.


回答1:


consider using a negative number for your length specifier: %-20s. For example:

   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);
      }   
   }

returns

Klein, Pete          555-123-4567
Jones, Jon           555-123-4567
Flinstone, Fred      555-123-4567



回答2:


Try putting the width into second placeholder with - sign for right padding as:

  String.format("%s, %-20s %s", firstName, lastName, phoneNumber)

This will give the specified width to the second argument(last name) with right padding and phone number will start after the specified width string only.

EDIT: Demo:

String firstName = "John";
String lastName = "Smith";
String phoneNumber = "1234456677";
System.out.println(String.format("%s, %-20s %s",firstName, lastName, phoneNumber));

prints:

John, Smith               1234456677




回答3:


The only alternative is loop the names list, calculate the maximum length of the String, and add whitespaces as needed after every name to ensure that all the numbers begin at the same column.

Using tabs has the disavantage that you cannot know a priori how many whitespace are equivalent to a tab, since it is dependent of the editor.



来源:https://stackoverflow.com/questions/13789141/how-to-use-string-format-in-java-to-replicate-tab-t

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!