20

データを 1 行ずつ出力していて、表のように整理したいと考えています。

私は最初に使用し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

次のように、右パディングの記号を使用して、幅を2番目のプレースホルダーに-入れてみてください。

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

これにより、右のパディングで2番目の引数(姓)に指定された幅が与えられ、電話番号は指定された幅の文字列の後にのみ開始されます。

編集:デモ:

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 に答える