【Java入門】printfメソッドで書式を指定して文字列を表示する方法

こんにちは!システムエンジニアのオオイシです。

System.out.printfメソッドを使って出力する変数を編集してますか?Javaではprintfメソッドを使ってデバッグ内容の出力を行ったり、処理内容のログを出力したりします。

そんな場合に、printfメソッドを使って文字列の中に変数を入れたり、また出力形式を揃えたりなどして読みやすく編集できると便利です。この記事では、printfメソッドを使った変数の出力と編集について

  • printfメソッドとは
  • 書式指定子の一覧表
  • printfメソッドの使い方

といった、printfメソッドの基本的な内容からprintとprintfの違いや文字列への変換にはString.formatメソッドを使うことなどの応用的な内容についても解説していきます。今回はprintfメソッドについて、使い方をわかりやすく解説します!

printfメソッドとは

Javaにはprintfというメソッドがあります。このメソッドは文字列や数値などを指定した書式で画面に出力することができます。例えば、10000という値を10,000とカンマ区切りで整形し、さらに単位の「円」を加えて10,000円と画面に出力するときなどです。

printfメソッドは第1引数に出力したい書式を、第2引数以降に使用する変数を記入します。第2引数以降は可変長引数で、必要なだけ引数を指定することができます。次のように記述します。

なお、JavaのprintfメソッドはC言語のprintf関数を参考に作られているので、同じような使い方ができます。C言語のprintf関数については、こちらで詳しく説明していますので、ぜひ参考にしてください!

【C言語入門】printfで文字列を表示(sprintfの使い方も解説)
更新日 : 2019年5月6日

書式指定子の一覧表

Javaの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
桁数・左詰・0埋め・改行 ・引数番号 (※△=スペースの意味)
指定子簡単な説明記述例出力例
最小桁数を指定printf("[%5d]", 123)[△△123]
.数文字列の最大幅を指定printf([%.3s]", "abcde")[abc]
-左詰printf([%-5s]", "abc")[abc△△]
00埋めprintf("[%05d]",123);[00123]
n改行printf("abc%ndef");abc
def
数$引数の番号printf(
"%3$s,%2$s,%1$s",
"str1","str2","str3");
str3,str2,str1
日付 (※日時は2018年1月5日 17時4分5秒を想定)
指定子簡単な説明記述例出力例
tY年(4桁)printf("%tY", new Date());2018
ty年(2桁)printf("%ty", new Date());18
tm月(2桁)printf("%tm", new Date());01
td日(2桁)printf("%td", new Date());05
te日(1~2桁)printf("%te", new Date());5
tH時(2桁)24時間制printf("%tH", new Date());17
tl時(1~2桁)12時間制printf("%tl", new Date());5
tM分(2桁)printf("%tM", new Date());04
tS秒(2桁)printf("%tS", new Date());05
tF日付printf("%tF", new Date());2018-01-05
tT時刻printf("%tT", new Date());17:04:05

このように、printfメソッドでいろいろな書式で出力できることがわかりましたね!実際にprintfメソッドを使ったプログラミングをするときは、この表を見ながら目的の書式指定子を探すと良いでしょう。

printfメソッドの使い方

変数の値を表示する方法

printfメソッドの第2引数以降には、編集の元となる整数や文字列などの変数を入れることができます。整数の変数に100を代入して、第1引数の「%d」で編集し、さらに単位の円を加えて「100円と出力する方法を次のサンプルプログラムで確認してみましょう。

実行結果:

このように”100円”と出力されたのが確認できました。第1引数の書式指定子は

  • 「%」変換指定子の開始
  • 「d」 第2引数の変数numが整数(デシマルのd)
  • 「s」 第3引数の変数strが文字列(ストリングのs)

と書式の指定をしています。

桁数を指定して表示する方法

printfメソッドの書式指定子には最小桁数を指定して表示する方法があります。最小桁数を指定すると、画面に出力する文字列を整列させることができます。例えば、

のように整列させると見やすいですよね。書き方は、データ型を表現する「%d」(整数)や「%s」(文字列)の間に最小桁数を表す数字を入れて「%6d」や「%6s」と記述します。

書式指定子で6桁を指定して、3通りの変数123、12345、123456を出力する場合のサンプルプログラムを確認してみましょう。

実行結果:
このように、変数num1と変数num2ともにカンマを含めて桁数6桁で出力できました。変数num3については、最小桁数の6桁を超えても7桁で出力されることが確認できました。

サンプルプログラムで使った書式指定子のそれぞれの意味は、「%,6d」が指定した整数の変数をカンマを含む6桁で出力する指定をしています。「%s」は文字列の変数を出力する指定をしています。

文字列の最大幅を指定して表示する方法

printfメソッドの書式指定子には文字列の最大幅を指定して表示する方法があります。最大幅を指定すると、文字列の左を優先して最大幅まで出力し、残りの文字列は削除されて出力されません。書き方は「%.6s」のように.(ドット)をつけて最大幅を指定します。

文字幅が7桁のabcdefgに対して、左から6桁を出力するサンプルプログラムを確認してみましょう。

実行結果:
このように、変数strは 「abcdefg」なのに対し、出力が「abcdef」のように「g」が出力されないことが確認できました。なお、最大幅の書式を指定できるのは、文字列のみで整数は利用できないので注意してください。

プラットフォームに依存しない改行を「%n」で行う方法

printfメソッドでプラットフォームに依存しないように改行するためには「%n」という書式指定子を使います。文字列の途中で改行するには、エスケープシーケンスの「\n」という改行コードを使用できますが、printfメソッドには別途「%n」が準備されています。

実は、エスケープシーケンスの「\n」はプラットフォームに依存する文字になります。プラットフォームに依存する文字とは、改行コードを例にとると、

  • Windows系OSは「\r\n(CR+LF)」
  • Unix系OS全般、Mac OS Xは「\n(LF)」
  • 古いMac OS(9以前)は「\r(CR)」

というように、OSが内部的に取り扱う改行コードが異なることを意味しています。プラットホーム依存の文字を使うと、MacでコンパイルしたJavaプログラムをUnixで実行した場合は改行されないことが起こる可能性があります。

そのため、printfメソッドを使うときに改行するときは「%n」を使うようにしましょう。ここでは「%n」「\n」を使ったサンプルプログラムで改行されるか確認してみましょう。

実行結果:

実行結果では、「%n」「\n」のどちらも問題なく改行されますが、コンパイルした環境と実行する結果が異なる場合に「\n」は改行されない可能性があるため注意してください。

printとprintfの違い

Javaには、printfメソッドとよく似たprintメソッドが存在します。printメソッドは、文字列や整数などの任意の値を画面に出力するメソッドです。printfメソッドとの構文の違いがわかりにくいので縦に並べると、

のように若干違いますよね?違いは、

  • printメソッドはprintfメソッドのように、フォーマット(書式)を意味する「f」がないというメソッド名の違い
  • 書式を指定する書式指定子がないため、引数は1つのみ

となります。printfメソッドとprintメソッドのそれぞれで、123という整数を表示する方法を次のサンプルプログラムで確認してみましょう。

実行結果:

このように、printとprintfの実行結果を比較すると同じ出力結果になりました。

しかし、printメソッドは書式の指定をすることができません。単純に変数の出力であればprintメソッド、書式の指定をしたいのであればprintfメソッドを使うなど、ケースに応じて使い分けるとよいでしょう。

文字列への変換はString.formatメソッドを使う

Stringクラスの変数に対して書式を指定したい場合もあります。例えば、

  • 指定した書式の文字列をファイルに出力
  • 指定した書式の文字列をプリンタに出力
  • 指定した書式の文字列をWeb画面に出力

など、ざまざまな場面が想定できます。System.out.printメソッドは、あくまでも、変数などを画面に出力するためのメソッドなので、ファイル出力などには使えません。

これらを解決する方法としてJavaにはString.formatメソッドという便利な機能があります。次のように記述します。

どこかでみたような構文ですよね!?実はString.formatメソッドは、この記事で紹介したprintfメソッドと使い方が同じなのです。printfメソッドは、Javaの内部的な処理ではString.formatメソッドを使用しているため使い方は全く同じとなるのです。

String.formatメソッドについては、こちらで詳しく説明していますので、ぜひ参考にしてください。

【5分で理解】JavaのString.formatの使い方まとめ
更新日 : 2019年4月23日

まとめ

いかかでしたか?今回はprintfメソッドの使い方について説明しました。printfは文字列などの値を指定した書式で画面に表示するために利用します。プログラムのデバッグで変数を出力したり、実行結果を見やすいように整形する場面で便利なので、ぜひ活用してください。

もし、printfメソッドの使い方を忘れてしまったらこの記事を確認してください!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

オオイシ

オオイシ

システムエンジニア歴15年のオオイシです!好物は Java と Ruby。プログラミング、システムアーキテクトからマネジメントに到るまでなんでも食べます。
システム開発の相談やお困りごとがあればお気軽に
[email protected] まで連絡頂けると幸いです

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説