特殊な文字の入力(エスケープシーケンス)
文字を文字列を値として使用する場合、キーボードから入力できないような文字があります。例えば改行です。文字列の中で改行をキーボードから入力した場合は次のようになります。
System.out.println("こんにちは お元気ですか");
上記の例では「こんにちは」と「お元気ですか」の間で改行を入力しようとしましたがキーボードで「Enter」キーを押してもプログラムが改行されるだけです。文字列の途中で改行するとコンパイルエラーとなります。
そこで改行などキーボードから入力できない文字などは「¥」+特定の文字の組み合わせで表現します。例えば改行は「¥n」という「¥」と「n」の組み合わせによって表すことができます。
System.out.println("こんにちは¥nお元気ですか");
上記では「こんにちは」と「お元気ですか」の間に「¥n」が記述されています。「¥n」は改行を表しますので実際に実行してみると次のように画面に出力されます。
こんにちは お元気ですか
このようにキーボードから入力できない文字を他の文字の組み合わせで表現したものをエスケープシーケンスといいます。
エスケープシーケンスの一覧
エスケープシーケンスとしては次のようなものが定義されています。
エスケープシーケンス | 意味 |
---|---|
¥b | バックスペース |
¥t | 水平タブ |
¥n | 改行 |
¥r | 復帰 |
¥f | 改ページ |
¥' | シングルクオーテーション |
¥" | ダブルクオーテーション |
¥¥ | ¥文字 |
¥ooo | 8進数の文字コードが表す文字 |
¥uhhhh | 16進数の文字コードが表す文字 |
改行や水平タブについてはキーボードから入力できない文字のためのエスケープシーケンスですが、「¥'」や「¥"」については次のような理由からエスケープシーケンスが用意されています。
文字を例に考えてみます。文字は1つの文字をシングルクオーテーション(')で囲うことで表していました。例えば「'a'」や「'各'」などです。ここで「'」を表す文字を表現しようとすると「'''」となります。
System.out.println(''');
文字を表すには「'」から「'」までに1つの文字を囲んで表現しますが、このプログラムでは2番目の「'」が文字ではなく文字の終端を表す「'」だと解釈されてしまいます。その結果上記のように記述すると「'」と「'」の間にも文字が記述されていないと言うはエラーとなります。
このような場合に「'」の代わりに「¥'」を記述すると、この「'」は文字の終端を表す「'」ではなく1つの文字としての「'」として扱われます。
System.out.println('¥'');
上記の場合には1番目と3番目の「'」の間に文字の「'」が記述されているものとして処理されます。
また文字列は「"」から「"」までの間に記述された文字の集まりですので、文字列の中で「"」を使用したい場合にも「"」の代わりに「¥"」を使用します。
System.out.println("この机は¥"1500円¥"です");
エスケープシーケンスは「¥」+特定の文字で表しますので文字や文字列の中で「¥」を使用したい場合にも注意が必要です。例えば「¥」という文字の後に「n」という文字を続けたい場合、「¥n」と記述してしまうとこれは改行を表すエスケープシーケンスとして扱われてしまいますので「¥」がエスケープシーケンスの1文字目ではなく単なる文字の「¥」としたい場合には「¥¥」と記述する必要があります。
System.out.println("改行のエスケープシーケンスは¥¥nです");
どのように出力されるのかはサンプルで確認して下さい。
サンプル
では簡単なサンプルで試してみます。
class JSample4_1{ public static void main(String args[]){ System.out.println('¥''); System.out.println("この机は¥"1500円¥"です"); System.out.println("改行のエスケープシーケンスは¥nです"); System.out.println("改行のエスケープシーケンスは¥¥nです"); } }
コンパイル後に実行すると次のように表示されます。
( Written by Tatsuo Ikura )