Java入門|エスケープシーケンス

見えない改行も、書きにくい記号も、Javaではきちんと表せる。エスケープシーケンスをやさしく覚えて表現の幅を広げよう

Javaで文字や文字列を扱うようになると、ふつうのひらがなや漢字、数字だけでなく、少し特別な文字も表したくなる場面が出てきます。たとえば、文字列の途中で改行したいときや、ダブルクォーテーションそのものを表示したいときです。ところが、こうした文字の中には、そのまま入力するとJavaが別の意味として受け取ってしまうものがあります。

そんなときに使うのが エスケープシーケンス です。エスケープシーケンスは、特殊な文字をコードの中で表すための特別な書き方です。見た目は2文字以上の組み合わせですが、Javaでは 1つの特別な意味を持つ文字 として扱われます。

最初は少し不思議に見えるかもしれませんが、エスケープシーケンスを理解すると、文字列の表現がとても柔軟になります。画面に改行を入れたり、記号そのものを表示したりできるようになるので、プログラムの出力をより思い通りに整えられるようになります。

ここでは、エスケープシーケンスとは何か、どのような種類があるのか、そして実際にどのように画面へ出力されるのかを、サンプルプログラムとともに丁寧に見ていきましょう。

エスケープシーケンスとは何か

Javaでは、文字の中に キーボードからそのまま入力しにくい特殊な文字 や、コードの中で特別な意味を持つ文字があります。そうした文字を表すために使うのが エスケープシーケンス です。

エスケープシーケンスは、\ を最初につけた文字の組み合わせで表します。日本語環境では、この \ が ¥ と表示されることもあります。そのため、本や環境によっては ¥n や ¥" のように見えることがありますが、意味としては \n や " と同じです。

つまり、エスケープシーケンスとは、

特殊な文字を表すための特別な書き方

だと考えるとわかりやすいです。

たとえば、次のようなものがあります。

  • \n … 改行
  • \t … タブ
  • " … ダブルクォーテーション
  • \ … バックスラッシュまたは円記号として表示される記号

これらは、見た目は2文字ですが、Javaでは特別な意味を持つ1文字分として扱われます。

なぜエスケープシーケンスが必要なのか

エスケープシーケンスが必要になる理由は、文字列の中でそのまま書けない文字があるからです。

たとえば、Javaでは文字列を " " で囲みます。ですので、文字列の中に " をそのまま書くと、Javaは ここで文字列が終わった と勘違いしてしまいます。

また、改行も同じです。文字列の中でそのままEnterキーを押して改行すると、Javaのコードとして正しく書けなくなることがあります。そんなときに \n を使うと、文字列の中に 改行という意味 を埋め込めます。

つまり、エスケープシーケンスは、Javaのルールにぶつからずに特殊な文字を表すための工夫なのです。

主なエスケープシーケンス

Javaでよく使う主なエスケープシーケンスを表に整理してみましょう。

エスケープシーケンス意味
\bバックスペース
\t水平タブ
\n改行
\f改ページ
\r復帰
'シングルクォーテーション
"ダブルクォーテーション
\バックスラッシュまたは円記号
\ooo8進数で表した文字コードの文字
\uhhhh16進数で表した文字コードの文字

学習の初期段階では、まず次の3つを特に覚えておくと役立ちます。

  • \n
  • "
  • \

この3つは、画面出力のプログラムでもよく使います。

\ が ¥ に見えることがある点に注意しよう

Javaの解説書では、\ が画面や資料によって ¥ に見えることがあります。これは表示環境の違いによるものです。

たとえば、解説書の中で

  • ¥n
  • ¥"
  • ¥¥

と書かれていても、実際の意味は

  • \n
  • "
  • \

と同じです。

この違いは初心者の方が混乱しやすいところですが、意味としては同じものだと考えて大丈夫です。Javaのソースコードでは、一般的には \ を使って表します。

サンプルプログラムでエスケープシーケンスを見てみよう

ファイル名:Sample4.java

// エスケープシーケンスを使って特殊な文字を表示するプログラム
class Sample4
{
    public static void main(String[] args)
    {
        System.out.println("改行を入れます。\n2行目を表示します。");
        System.out.println("ダブルクォーテーションを表示します。:\"Java\"");
        System.out.println("バックスラッシュを表示します。:\\");
    }
}

このプログラムを実行すると、画面には次のように表示されます。

改行を入れます。
2行目を表示します。
ダブルクォーテーションを表示します。:"Java"
バックスラッシュを表示します。:\

この結果を見ると、コードの中で書いた \n、"、\ が、それぞれ特別な意味を持って働いていることがわかります。

サンプルの1行目では \n を使っている

まず1行目を見てみましょう。

System.out.println("改行を入れます。\n2行目を表示します。");

ここで使われている \n は 改行 を表すエスケープシーケンスです。そのため、文字列の途中に \n があると、そこで次の行へ移ります。

コードの見た目では1つの文字列ですが、画面では次のように2行になります。

改行を入れます。
2行目を表示します。

これはとても便利です。1回の System.out.println の中で、文字列の途中に改行を入れたいときに使えます。

サンプルの2行目では " を使っている

次に2行目を見てみます。

System.out.println("ダブルクォーテーションを表示します。:\"Java\"");

ここでは " を使っています。これは ダブルクォーテーションそのもの を表すエスケープシーケンスです。

Javaでは " は文字列の開始や終了を示す大事な記号なので、そのまま文字列の中に書くことはできません。そこで " と書くことで、これは文字列の終わりではなく、表示したい記号としての " ですよ、とJavaに伝えています。

その結果、画面では次のように表示されます。

ダブルクォーテーションを表示します。:"Java"

つまり、コードの中では " と2文字で書いていても、画面では " として表示されるのです。

サンプルの3行目では \ を使っている

3行目では \ を使っています。

System.out.println("バックスラッシュを表示します。:\\");

ここでの \ は、バックスラッシュそのものを表すエスケープシーケンスです。環境によっては、この記号が円記号のように見えることもあります。

Javaでは \ 自体がエスケープシーケンスの始まりとして使われるため、そのまま1つだけ書くと、次に続く文字と組み合わせて特別な意味を持とうとします。ですので、\ そのものを表示したいときには \ と書く必要があります。

画面では次のように表示されます。

バックスラッシュを表示します。:\

エスケープシーケンスは見た目よりも意味が大切

エスケープシーケンスは、見た目だけ見ると 文字を2つ書いている ように見えます。たとえば \n は \ と n の2文字に見えます。しかし、Javaではこれを 1つの特別な意味を持つ記号 として扱います。

この点を整理すると、次のようになります。

コードに書くものJavaが受け取る意味実行結果の例
\n改行行が変わる
"" を表す" が表示される
\\ を表す\ が表示される

つまり、エスケープシーケンスは 見た目の文字の数ではなく、表している意味で理解する ことが大切です。

文字列の中で特に覚えたいエスケープシーケンス

学習の最初に特に出番が多いものをもう一度整理しておきましょう。

エスケープシーケンスよく使う場面
\n文字列の途中で改行したいとき
"文字列の中に " を入れたいとき
\\ や ¥ を表示したいとき
\t文字の間をタブでそろえたいとき

この中でも、まずは \n、"、\ をしっかり押さえておくと、画面出力の表現がかなり広がります。

この図では、コードに書いた記号の並びが、そのままの文字として表示されるわけではないことがわかります。たとえば \n は画面に \n と表示されるのではなく、改行として働きます。" は " を、\ は \ を表します。

このように、エスケープシーケンスは コードの表記 と 実際の表示結果 をつなぐ特別な書き方です。これを理解すると、出力結果をより正確にイメージしながらコードを書けるようになります。

よくある混乱ポイントにも注意しよう

エスケープシーケンスの学習では、いくつか混乱しやすい点があります。

\n は文字の n を表示するわけではない

System.out.println("こんにちは\nJava");

これは こんにちはnJava とは表示されません。途中で改行されます。

" は \ と " を別々に表示するわけではない

これは ダブルクォーテーションを文字列の中に入れるための特別な書き方です。

\ は \ を2つ表示するわけではない

コードの中で \ と書くと、画面には \ が1つ表示されます。

この違いを表にすると、次のようになります。

コードそのまま読んだ印象実際の意味
\n\ と n改行
"\ と "" を表す
\\ が2つ\ を1つ表す

こうした点は、最初のうちは少し不思議に感じるかもしれませんが、何度か実行結果を見るうちに自然に慣れていきます。

エスケープシーケンスを知ると文字列の表現が広がる

これまで文字列は、そのまま表示したい文章を書くものとして見てきました。しかし、エスケープシーケンスを使えるようになると、文字列の中に改行や特別な記号を埋め込めるようになります。

たとえば、

  • 説明文を2行に分けて表示する
  • 会話文の中に " " を入れる
  • ファイルのパスや記号を表示する

といったことができるようになります。

つまり、エスケープシーケンスは、ただの特殊ルールではなく、文字列をより自由に表現するための大切な道具なのです。

Sample4.java から学べる大切なこと

最後に、今回のサンプルをもう一度確認してみましょう。

ファイル名:Sample4.java

// エスケープシーケンスを使って特殊な文字を表示するプログラム
class Sample4
{
    public static void main(String[] args)
    {
        System.out.println("改行を入れます。\n2行目を表示します。");
        System.out.println("ダブルクォーテーションを表示します。:\"Java\"");
        System.out.println("バックスラッシュを表示します。:\\");
    }
}

このプログラムから学べることは、次の通りです。

学べること内容
エスケープシーケンスの役割特殊な文字を表すための書き方
\n改行を表す
"ダブルクォーテーションを表す
\バックスラッシュを表す
コードと実行結果の違い書き方と表示結果は同じではない

エスケープシーケンスは、最初は少し特殊に見えるかもしれませんが、Javaで文字列を扱ううえではとても大切な基本です。コードの中で特別な文字を正しく表せるようになると、画面出力の表現もぐっと広がります。まずは \n、"、\ の3つを中心に、コードに書いたときと画面に出るときの違いを意識しながら、少しずつ慣れていくとよいでしょう。