【5分で理解】JavaのString.formatの使い方まとめ

みなさんJavaのString.formatメソッドを使っていますか?

とても便利なメソッドだと思いますが

基本的な書式を忘れてしまう
カンマ区切りの数値を扱うにはどうしたらいいのか
先頭から0で埋めた数値はどうやれば実現できるのか
String.formatで16進数を扱うにはどうしたらいいの?

といった声にお答えするのが本記事です!

この記事ではString.formatの使い方をわかりやすくご説明します。

なお、Javaの記事については、こちらにまとめています。

目次

String.formatの基本的な使い方

概要

JavaにはString.formatというメソッドがあります。このメソッドは引数に指定した文字列(書式)を元にルールに沿った文字列を返すというメソッドになります。

少し難しく感じてしまいますよね。早速コードを見てみましょう。

int hoge = 1;
String str = String.format("変数hogeの中身は%dです。", hoge);

System.out.println(str);

実行結果

変数hogeの中身は1です。

いかがでしょうか。どんな動きをするかが少しわかりましたか?

String.formatの第一引数は決められたルール(書式)に従って書く必要があります。そして第二引数以降は第一引数で決めた書式に割り当てるための変数を順番に渡していきます。

書式書式と書いていますがわかりやすく言ってしまえば「%~」と書いてある部分です。この部分を第二引数以降で指定した値に置き換えることができるよ、というのがString.formatになります。

数値を扱う場合は第一引数の文字列の中で「%d」と書きます。では文字列や真偽値、小数などを扱いたい場合はどうすればいいでしょうか。

次の項目で順番に見ていきましょう。

真偽値の扱い(%b)

真偽値(Javaではtrueかfalseを指す)を扱いたい場合は「%b」を使いましょう。

コード

String str = String.format("TRUEは%b、FALSEは%b", true, false);

上記の変数strを表示した結果

TRUEはtrue、FALSEはfalse

文字列の扱い(%s)

文字列(複数の文字の集まりを文字列という)を扱いたい場合は「%s」を使いましょう。

コード

String str = String.format("文字列の内容は%s", "HOGE");

上記の変数strを表示した結果

文字列の内容はHOGE

文字の扱い(%c)

先程は文字列の例でしたが今度は文字を扱いたい場合の例です。ちなみに文字は文字列と違います。文字列は複数の文字の集まりの事をいいますが文字は1文字(厳密に言うと1バイト)の事を文字といいます。

この文字を扱うには「%c」を使いましょう。

コード

String str = String.format("貴方の評価は%c", 'A');

上記の変数strを表示した結果

貴方の評価はA

浮動小数点(%f)

浮動小数点(小数の事)を扱いたい場合は「%f」を使うことで表現できます。

コード

String str = String.format("円周率は%f", 3.1415);

上記の変数strを表示した結果

円周率は3.141500

日時(%tXX)

日時について扱いたい場合ですがこれは年、月、日などによって指定する書式が違います。

種類が多いため表にしてみます。

パラメータ名内容
H時間(00~23)
I時間(01~12)
k時間(0~23)
l時間(1~12)
M分(00~59)
S秒(00~60)
60はうるう秒が必要な時の特殊な値
Lミリ秒(000~999)
Nナノ秒(000000000~ 999999999)
pamもしくはpmの表示
s1970年1月1日からの秒
Q1970年1月1日からのミリ秒
BJanuaryやFebruary等の月の英名
b上記の略語表記
JanやFeb等
a曜日の英名:Sunday,Monday等
C4桁の年を100で割った数値(00~99)
Y
y年の下二桁
j年の何日目か
m月(01~13)
d月の何日目か(01~31)
e月の何日目か(1~31)

使い方としては、

Date date = new Date();
String date_str = String.format("%tH:%tM", date.getTime(), date.getTime());
System.out.println(date_str);

このように%t~という形で上記の表のアルファベットと組み合わせて使います。

上記の例では現在の時間と分を表示しているコードになります。

数値を加工して出力する

カンマ区切り

金額等を表す際に3桁区切りでカンマが入りますよね?あの数値をString.formatを使うことで簡単に実現することができます。

コード

String str = String.format("%,d", 123456789);

変数strを表示した結果

123,456,789

カンマで区切りたい場合は,を%の後につけることで実現できます。

,の後ろの3dについては「数値で三桁ごと」にという意味になります。

8進数

8進数を表現したい場合は「%o」を使います。8進数って何?と思われた方は下記のサイトがお役に立つかと思います!

2進数、16進数と10進数

我々が普段使っているのは10進数になります。
(10進数は9の次、10で桁があがる。8進数の場合は7の次で桁が上がり10になる。)

コード

String str = String.format("8進数で表示すると%o", 10);

変数strを表示した結果

8進数で表示すると12

16進数を扱いたい

先程は8進数を扱いましたが今度は16進数の場合です。16進数の場合は「%x」を扱うことで表現できます。

コード

String str = String.format("16進数で表示すると%x", 10);

変数strを表示した結果

16進数で表示するとa

数値の先頭を何かで埋めたい場合

0で埋める場合

「00001」のように先頭に0をで埋めたい場合は以下のようにします。

コード

String str = String.format("%05d", 1);

変数strを表示した結果

00001

このようになります。
もしこれが「12345」のような5桁数値の場合は頭に0で埋められることはありません。

0で埋められるケースとしては「%~d」で指定した桁数に満たない数値は足りない桁分0で埋められることになります。

空白で埋める場合

今度は0ではなく空白を入れたい場合はどうなるのでしょうか。

先頭に空白を入れる

コード

String str = String.format("%5d", 10);

変数strを表示した結果

   10

後ろに空白を入れる

コード

String str = String.format("%-5d", 10);

変数strを表示した結果

10

空白を入れたい場合は、「%[桁数][型]」といった形で実現できます。

ただ、この方法は先頭から空白で埋めるので後ろ側に空白を入れたい場合は「%-[桁数][型]」という書き方をすることで実現できます!

まとめ

ではまとめます。

String.formatを使うことで書式にそった形で文字列を変換して返すというメソッドであることがわかりました。

このメソッドは数値や文字列を置き換えるだけでなくコンマ区切りにしたり、数値や文字にスペースを挿入したりと様々な使い方が可能です。

とても便利なので覚えておくとよいでしょう。忘れてしまった場合はこの記事を思い出して振り返りましょう!

この記事を書いた人

30歳、フリーランスプログラマ。中学の頃よりプログラミングに興味を持ちゲーム開発やWebサイト構築などを経験
新しいフレームワークやライブラリに興味があり革新的な機能が含まれていると泣いて喜ぶ。

目次