ふりぶろぐ
Web Engineer's Blog
Java

【Java】String.formatを使ってみる

Java

先日の記事(【Java】Enumのループ)でなんとなく使ったString.format()。

あまり使う機会もないと思うので忘れがちですよね。

うまく使えば便利なメソッドなので、使い方について簡単にまとめておきます。

概要

C言語みたいに%dとか%sとかで数値や文字列を生成します。

ちょっと可読性が低い気がするけど、場面によっては便利。

あと0埋めするのにも使えます。

他にも文字列をカンマ区切りにしたり、数値を8進数や16進数にするのにも使えるみたい。

0埋めやカンマ区切りは結構使えそうですね。

使い方

簡単に使い方をまとめます。

基本

基本的には%XのXに何かしらの文字を入れる感じですね。

文字、文字列、数値、真偽値、浮動小数点、日付を扱っています。

// 文字列(%s)
System.out.println(String.format("%sの記事と同じ%sです。", "前回", "例文"));

// 数値(%d)と文字(%c)
System.out.println(String.format("身長が%dcm〜%dcmの人には%cがオススメ", 145, 155, 'S'));

// 文字列(%s)としても扱える
System.out.println(String.format("身長が%scm〜%scmの人には%sがオススメ", 145, 155, "S"));

// 真偽値
System.out.println(String.format("%bと%b", true, false));

// 浮動小数点(%f)
System.out.println(String.format("floatはこんな感じ%f", 1.2345678));

// 日付(%tX) Xにはフォーマットによって違う文字が入る 今回はyyyy-MM-dd
System.out.println(String.format("%tF", new Date()));
結果
前回の記事と同じ例文です。
身長が145cm〜155cmの人にはSがオススメ
身長が145cm〜155cmの人にはSがオススメ
trueとfalse
floatはこんな感じ1.234568
2019-10-23

0埋め

0埋めしてみます。

0だけでなくスペースで埋めることも可能です。

// 0埋め(3文字)
System.out.println(String.format("%03d", 1));
// スペース埋め(3文字)
System.out.println(String.format("%3d", 0));
// 0埋め(5文字)
System.out.println(String.format("%05d", 1));
// スペース埋め(5文字)
System.out.println(String.format("%5d", 0));
結果
001
  0
00001
    0

カンマ区切り

数値に対して3文字区切りでカンマを追加します。

値段を扱う際には便利ですね。

// 3文字区切りでカンマを入れる
System.out.println(String.format("%,d", 1000000000));
結果
1,000,000,000

進数変換

あまり使う場面はないと思いますが、進数変換もできます。

10進数を8進数、16進数に変換します。

int num = 10;
// 10進数(%d)
System.out.println(String.format("10進数で表示すると%d", num));
// 8進数(%o)
System.out.println(String.format("8進数で表示すると%o", num));
// 16進数(%x, 小文字)
System.out.println(String.format("16進数で表示すると%x", num));
// 16進数(%X, 大文字)
System.out.println(String.format("16進数で表示すると%X", num));
結果
10進数で表示すると10
8進数で表示すると12
16進数で表示するとa
16進数で表示するとA

まとめ

String.format()の使い方を簡単に解説しました。

あまり使う場面はないですが、知っておくと便利なものが多いですね。

0埋めやカンマ区切りなんかは覚えておくと良いですね。

しばらく使わないと忘れてしまいそうですが…

ABOUT ME
りーふ
たまにブログを書いてるWebエンジニア。 サーバーサイドメインでインフラとフロントエンドもたまにやります。 Javaが得意。 Play Frameworkが好き。 本業は迷惑をかけない程度に手を抜くスタイル。 意識高い系は苦手。