LoginSignup
6
8

More than 3 years have passed since last update.

【Java】printf()メソッド (任意のフォーマットで文字を出力)

Posted at

【タイトル】printf()メソッド

任意のフォーマットで コンソールやログに文字を出力するためのメソッド

【説明】printf()メソッド とは

この メソッド は簡単にいうと 「 指定子を呼ばれる記号を使い、文字の好きな部分を装飾するメソッド 」です。
printf()メソッド の 「f」は、フォーマット(書式)を意味しています。

printfメソッドとprintメソッドの違い

System.out.println(), System.out.print() は「文字列をそのまま表示することしかできないメソッドなのに対し、printf()メソッドは「出力する文字などに 様々な装飾 を施すことが可能 」なのが大きな違いで、その分非常に自由度が高いといえます。

【使用場面】

printf()メソッド は文字列や数値などを 指定した書式で画面に出力することができるため、以下のようなことが可能です。

  • 「10,000」のように、値をカンマ区切りで整形する
  • 数字の後ろに単位を付けて出力する

【書き方】

printf()メソッドの記述の仕方は以下です。

  • 第一引数には出力する文字の書式
  • 第2引数以降に使用する変数を記入

printf()メソッドは以下の形式で記述します。

System.out.printf(書式, 引数1, 引数2, ・・・);

書式指定子チートシート (値の形式を変更する記号)

printfメソッドで 出力する変数を編集する 」には、書式指定子という記号を使用します。書式指定子は、編集したい内容によって色々な書き方や種類があります。
以下がその一覧表です。

【型を指定する書式指定子】

指定子 説明 記述例 出力例
% なし 書式指定子の開始 なし なし
d 整数 10進整数表記になる printf("%d", 123) 123
o 整数 8進整数表記になる printf("%o", 123) 173
x 整数 16進整数表記になる printf("%x", 123) 7b
e 小数 指数で出力 printf("%e", 123.4f) 1.23E+02
f 小数 小数点数出力 printf("%f", 123.4f) 123.4
s 文字列 文字列を出力 printf("%s", “abc”) abc
c 文字 文字を出力 printf("%c", ‘a’) a
b 真偽値 真偽値を出力 printf("%b", true) true

【日付の書式指定子】

指定子 説明 記述例 出力例
tY 年(4桁) printf("%tY", new Date()); 2020
ty 年(2桁) printf("%ty", new Date()); 20
tm 月(2桁) printf("%tm", new Date()); 11
td 日(2桁) printf("%td", new Date()); 30
te 日(1~2桁) printf("%te", new Date()); 1
tH 時(2桁)24時間制 printf("%tH", new Date()); 21
tl 時(1~2桁)12時間制 printf("%tl", new Date()); 9
tM 分(2桁) printf("%tM", new Date());v 59
tS 秒(2桁) printf("%tS", new Date());v 30
tF 日付 printf("%tF", new Date()); 2020-11-30
tT 時刻 printf("%tT", new Date()); 21:04:05

【その他の書式指定子】

指定子 指定子を付与することで得られる効果
- 左寄せで出力される(幅指定必須)
+ 符号を出力する
0 前に0を詰める

【サンプルコード】 変数の値を表示する

第2引数以降には、整数や文字列などの変数を入れることができます。
、以下のプログラムは、「整数型の変数と、文字列の変数を編集して出力」したものです。
内容に関してはコード内のコメントを参照してください。

        // 整数型変数に値を格納
        int num1 = 100;
        int num2 = 1000;
        int num3 = 10000;
        int num4 = 100000;
        // 文字列型変数に値を格納
        String str = "¥";
        // 「%s」は文字列型の変数。
        // 「%,6b」は、「%6」をベースに、カンマ区切りと、最大桁数6という意味合いをもたせています。
        // 「%n」は 改行を意味しています。
        System.out.printf("%s%,6dです。%n", str, num1);
        System.out.printf("%s%,6dです。%n", str, num2);
        System.out.printf("%s%,6dです。%n", str, num3);
        System.out.printf("%s%,6dです。%n", str, num4);
        // カンマを入れない場合の出力結果も比較してください。
        System.out.printf("%s%6dです。", str, num4);

【実行結果】

¥   100です。
¥ 1,000です。
¥10,000です。
¥100,000です。
¥100000です。

【サンプルコード】 先頭に「0」をつけて、01,02,03,,,10,11,12と出力する

        //拡張for文を用いて 1 ~ 10 の数を 二桁表記で出力する
        for (int i = 0; i <= 10; i++) {
            if (i == 0) {
                continue;
            }
            //"%0"は「前に0を詰める」"2"は「最大桁数」"d"は「整数」の書式指定子です。
            System.out.printf("%02d,", i);
        }

【実行結果】

01,02,03,04,05,06,07,08,09,10

ちなみに、最大桁数3に指定した場合は以下のようになります。

System.out.printf("%03d,", i);

出力結果

001,002,003,004,005,006,007,008,009,010,

"%03"は第二引数を3文字で出力するため、3文字に満たない場合は不足分を0詰めされて上記のような結果となります。

System.out.printf()による日時の出力

【説明】

指定子を用いることで、取得した現在時刻を日本人に馴染みあるフォーマットへ変換するといったことも簡単に行えます。

【サンプルコード】 取得した現在時刻の形式を任意に変換

まず、現在時刻を取得します。

import java.util.Date;

public class AboutPrintf {

    public static void main(String[] args) {
        // 取得した日付をインスタンス化する。
        Date date = new Date();
        //日付を出力する
        System.out.println(date);
    }

}

【実行結果】

Mon Nov 30 03:33:04 JST 2020

取得した現在時刻の形式をに変換します。
「 年月日(曜日)午前or午後〇〇時〇〇分 」
java
System.out.printf("%tY年%<tB月%<te日(%<ta)%<tp%<tI時%<tM分", date);

<!-- 実行結果 -->

【実行結果】

2020年11月月30日(月)午前03時36分

変換完了しました。

【まとめ】

記事を書きながら色々な使い方ができる便利なメソッドだとおもいました。
組み合わせによって非常に幅広い表現が可能になるので、数をこなして習得していこうと思います。

参考文献・記事

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8