書式付きの入出力
さて、同じプログラムを書式付きの入出力を使った別の方法でも実装してみましょう。入力データの読み込みについては標準入力ストリームとjava.util.Scannerクラスを使います。データの出力には、標準出力ストリームとjava.io.PrintStreamクラスのprintfメソッドを使います。Sample210クラスを作成したのと同じような手順でSample211クラスを作成して、「//----- ここから」と「//----- ここまで」とで囲まれたコードを追加します。import文についてもSample210クラスコーディング時と同様に[インポートの編成]を使って追加します。
import java.util.Scanner; public class Sample211 { //----- ここから public static void main(String[] args) throws java.lang.Exception { Scanner s = new Scanner(System.in); System.out.print("Input name:"); String name = s.next(); s.close(); System.out.printf("Hello, %s", name); } //----- ここまで }
書式付きの入出力については、こんな方法もあると知っていただくだけでよいので、ここでは簡単な紹介だけにしておきます。今回のプログラムのように、どんなデータをストリームから読み込むか分かっているような場合は、java.util.Scannerクラスを使うと楽になります。例では文字列でしたが、int型データの読み込みなどにも簡単に対応できます。
java.io.PrintStreamクラスのprintfメソッドについては、今回の例ではあまりありがたみがありませんが、「データの出力書式を指定できるため数値を必ず5けたで出力したい」といった場合には、これを簡単に実現できるので重宝します。例では、「"Hello, %s"」で書式を指定しています。%sは、次の引数であるnameを文字列として置き換えるという指示となりますので、結果として「"Hello, "+name」と同じ文字列が出力されます。
プログラムを作成してアプリケーションを実行すると、Sample210クラスと同じように動作しますから確認をしてみてください。確認ができたら、試しに「System.out.printf("Hello, %s", name);」を「System.out.printf("Hello, %S", name);」と置き換えてプログラムを実行してみましょう。小文字で入力されていた値が大文字で出力されるはずです。このように、%sや%Sでデータを出力するときの書式を制御できるのです。このことが何となく分かれば十分です。なお、書式文字列の構文について詳細を知りたい場合はJDKのドキュメントに含まれる「書式文字列の構文」をご覧ください。
まとめ
今回のプログラムを理解すれば、例えば「ユーザー登録に当たり氏名と電子メールアドレスを教えてください」というメッセージを表示してユーザーの入力を促し、入力されたデータを基に、「あなたの氏名はXXXX。電子メールアドレスはYYYYでよろしいですか?」(XXXXとYYYYにはユーザーからの入力データを代入)というメッセージを表示するプログラムを作成することができるようになります。つまり、このようなユーザーの入力に応じて動作するほかのアプリケーションも同様にして作成することができるようになるわけです。基本は同じ動作をするプログラムでも、今回紹介したように実装方法はいろいろありますから、ほかの方法も調べてみると楽しいと思います。
次回は今回登場したjava.lang.Exceptionクラスに関係する「例外」について解説をする予定です。お楽しみに。
筆者紹介
小山博史(こやま ひろし)
情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。Ja-Jakartaプロジェクト(http://www.jajakarta.org/)へ参加し、コミッタの一員として活動を支えている。また、長野県の地域コミュニティである、SSS(G)(http://www.sssg.org/)やbugs(J)(http://www.bugs.jp/)の活動へも参加している。
Copyright © ITmedia, Inc. All Rights Reserved.