エンジニア

Java String Formatによる文字列の書式整形

gray laptop computer showing html codes in shallow focus photography

Javaで文字列を出力した際に、以下のように表示が崩れていると美しくないですね。


Name Gender Savings
Hatakeyama Male 1400000
Yamada Female 300000
Saito Male 25500000

各行の名前や性別などは文字の長さが違うため、表示の桁が揃っていません。本当は以下のように整形して出力することが理想ですよね。


Name          Gender       Savings
Hatakeyama      Male     1,400,000
Yamada        Female       300,000
Saito           Male    25,500,000

Stringクラスには、文字列を整形して表示するためにformat()メソッドが用意されています。書式整形では以下のような整形を行うことが可能です。

format()メソッドを使った例を見てみます。以下は「XX日目に死ぬXX」という雛形」を準備し、それぞれの「XX」の部分に数字や文字列を入れて文字列を組み立てる例です。

String.format("%d日目に死ぬ%s", 100, "ワニ");

出力内容は以下の通りになります。

100日目に死ぬワニ

format()メソッドの第1引数に指定するのは文字列の雛形を指定する書式指定文字列と呼ばれるものです。%記号の部分はプレースホルダ (place holder)と呼ばれ、第2引数以降で指定した値が挿入されます。

プレースホルダーは以下の文法で記述します。

% 修飾(省略可能) 桁(省略可能) 型(必須)

各プレースホルダーの書式は以下の通りです。

  • 修飾
    • , 3桁ごとにカンマ
    • 0 ゼロパディング
    • - 左寄せ
    • + 符号を強制表示
    • 表示桁数を指定。
    • n,m形式で指定した場合、全体n桁、小数点以下m桁での表示
    • d 整数
    • s 文字列
    • f 小数
    • b 真偽値

冒頭のような整形された一覧を出力するコードを書いてみます。


package sample;

import java.util.ArrayList;
import java.util.List;

public class StringPractice2 {
    public static void main(String[] args) {
        final String FORMAT_HEADER = "%-10s %-6s %10s";
        final String FORMAT_BODY = "%-10s %-6s %,10d";
        Character c1 = new Character("Hatakeyama", "Male", 1400000);
        Character c2 = new Character("Yamada", "Female", 300000);
        Character c3 = new Character("Saito", "Male", 25500000);
        List<Character> list = new ArrayList<>();
        list.add(c1);
        list.add(c2);
        list.add(c3);

        System.out.printf(FORMAT_HEADER, "Name", "Gender", "Savings");
        System.out.println();
        for (Character character : list) {
            String s = String.format(FORMAT_BODY, character.name, character.gender, character.savings);
            System.out.println(s);
        }
    }
}

class Character {
    String name;
    String gender;
    int savings;

    public Character(String name, String gender, int savings) {
        this.name = name;
        this.gender = gender;
        this.savings = savings;
    }
}

書式整形と同時に出力を行いたい場合は、System.out.printf()メソッドを使うと便利です。引数の指定方法は、String.format()メソッドと同じです。

ブログランキングに参加しています。記事を気に入ってくださったら是非クリックで応援お願いします。

にほんブログ村 株ブログ インデックス投資へ   インデックス投資人気ブログランキング

-エンジニア

© 2020 Hoehoe Blog