みなさん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) |
p | amもしくはpmの表示 |
s | 1970年1月1日からの秒 |
Q | 1970年1月1日からのミリ秒 |
B | JanuaryやFebruary等の月の英名 |
b | 上記の略語表記 JanやFeb等 |
a | 曜日の英名:Sunday,Monday等 |
C | 4桁の年を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進数って何?と思われた方は下記のサイトがお役に立つかと思います!
我々が普段使っているのは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を使うことで書式にそった形で文字列を変換して返すというメソッドであることがわかりました。
このメソッドは数値や文字列を置き換えるだけでなくコンマ区切りにしたり、数値や文字にスペースを挿入したりと様々な使い方が可能です。
とても便利なので覚えておくとよいでしょう。忘れてしまった場合はこの記事を思い出して振り返りましょう!