Java | 基礎文法:エスケープシーケンス

Java Java
スポンサーリンク

エスケープシーケンスの全体像

エスケープシーケンスは、文字列リテラルの中に「そのまま書けない特殊な文字」や「見えない制御文字」を埋め込むための約束です。Javaではバックスラッシュ(\)から始まる記法で表し、改行、タブ、引用符、バックスラッシュ自身、制御文字、Unicodeコードポイントなどを安全に表現できます。正しく使うと出力整形が楽になり、ファイルパスや正規表現などの「バックスラッシュ多用領域」でもバグを防げます。


代表的なエスケープ(改行・タブ・引用符・バックスラッシュ)

改行と行区切りの違い

System.out.print("1行目\n2行目"); // \n で改行(改行コードを1文字として挿入)
System.out.printf("A%nB%n");     // %n はOSに合わせた改行(移植性が高い)
Java

\n は改行コードそのもの、%n は書式出力で使える「プラットフォーム依存の改行」。ログやレポートで移植性を重視するなら printf%n を選ぶと安心です。

引用符とバックスラッシュの扱い

System.out.println("ダブルクォート: \"");
System.out.println('\'');     // シングルクォート(文字リテラル)
System.out.println("\\");     // バックスラッシュ自身
Java

文字列の区切りに使う記号(” ‘)やエスケープ開始記号(\)は、文字列中でそのまま使えないためエスケープします。文字リテラル('x')では1文字だけを表現でき、'\n' のように制御文字も扱えます。


制御文字とユニコードエスケープ(重要ポイントの深掘り)

よく使う制御文字

System.out.print("タブ\t区切り\n");
System.out.print("ベル音\bはバックスペース"); // \b はバックスペース、\f はフォームフィード
Java

制御文字は「画面やプリンタに対する指示」です。近年は \b(バックスペース)や \f(フォームフィード)を使う機会は少ないですが、ログ整形やターミナル操作で知っておくと役立ちます。

Unicode エスケープの仕組みと注意

System.out.println("\u3042"); // あ(ひらがな「U+3042」)
Java

\uXXXX(16進4桁)で任意のUnicode文字を埋め込めます。Javaは「字句解析の前」にUnicodeエスケープを展開するため、コメント中の \u000A(改行)などがコード構造に影響することがあります。可読性のため、通常はソースに直接UTF-8で書ける環境を使い、Unicodeエスケープは「どうしても必要な時のみ」にしましょう。

絵文字や補助文字(サロゲートペア)

String smile = "\uD83D\uDE00"; // 😀(U+1F600 をUTF-16の2コードユニットで表現)
System.out.println(smile);
Java

BMP外(U+10000以上)の文字はサロゲートペアで表現します。長さや文字数の扱いが難しくなるため、文字列操作(部分切り出しなど)では「コードポイント」API(codePoints())の利用を検討しましょう。


Windows パス・正規表現・printf での実践的な注意

Windows ファイルパスの記述

String path = "C:\\temp\\file.txt"; // バックスラッシュは二重に
Java

"\temp" のように1つしか書かないと \t(タブ)に化けます。Windowsパスは常に \\ を使いましょう。あるいはスラッシュ(C:/temp/file.txt)も多くのAPIで通用します。

正規表現やJSONでの二重エスケープ

String regex = "\\d+";   // Java文字列で「\d」を表すには「\\d」
System.out.println("A123".matches(regex)); // true
Java

正規表現やJSONのように「言語側もエスケープ、内部表現もエスケープ」がある場合は、二重に意識します。Java文字列の中で「正規表現のバックスラッシュ」を書くには \\ が必要です。

printf の改行と書式

System.out.printf("合計=%d%n平均=%.2f%n", 10, 3.14159);
Java

%n は環境依存の改行、%.2f は小数点以下2桁で丸め。出力整形は「エスケープ+書式指定」で読みやすさが大幅に向上します。


テキストブロックとエスケープの変化

三重引用符で複数行文字列

String html = """
    <html>
      <body>
        <h1>Hello</h1>
      </body>
    </html>
    """;
System.out.println(html);
Java

Javaのテキストブロック(""" ... """)は改行やインデントを自然に含められます。通常の引用符や \n をほぼ意識せずに書け、可読性が飛躍的に向上します。

テキストブロック内での引用符と改行

String s = """
    引用符 " はそのまま書けます。
    三連続の """ + "\"\"\"" + """ を含めたい場合は一部をエスケープして回避します。
    """;
Java

テキストブロック内ではダブルクォート(”)自体はエスケープ不要です。ただし """(連続三つ)を文字列中に書きたい場合は、連続を崩すために一部をエスケープして混在させます(例示のように分割や \"\"\" を併用)。


例題で身につける

例 1: 表の整形(タブと改行)

public class Table {
    public static void main(String[] args) {
        System.out.println("Name\tQty\tPrice");
        System.out.println("Apple\t3\t120.0");
        System.out.println("Banana\t12\t45.5");
    }
}
Java

例 2: プロンプトと入力ガイドの表示

public class Prompt {
    public static void main(String[] args) {
        System.out.print("値を入力してください(終了は Enter のみ):\n> ");
    }
}
Java

例 3: 正規表現で数字抽出(二重エスケープ)

public class ExtractDigits {
    public static void main(String[] args) {
        String s = "id=ABC123XYZ";
        String regex = ".*?(\\d+).*";
        System.out.println(s.replaceAll(regex, "$1")); // 123
    }
}
Java

仕上げのアドバイス(重要部分のまとめ)

改行は \n%n を使い分け、引用符やバックスラッシュは正しくエスケープする。Unicodeは通常UTF-8で直接書き、必要時のみ \uXXXX を使う(コメント中のUnicodeエスケープが構文に影響する点に注意)。Windowsパスや正規表現は「二重エスケープ」を意識し、可読性が必要ならテキストブロックを選ぶ。エスケープは「見えない文字の意思表示」。出力の読み手を想像し、最も伝わる形に整えましょう。

タイトルとURLをコピーしました