Javaで特殊文字を表現する際、エスケープシーケンスを利用する必要があります。
本記事では、Javaを学習中の初心者向けにエスケープシーケンスの使い方をサンプルコードを掲載しながらご紹介していきます。
目次
エスケープシーケンスとは
エスケープシーケンスは、文字をそのままの文字列として解釈するのではなく、タブや改行をはじめとした文字出力制御を行うための特殊文字のことを指します。
使用方法
Javaでのエスケープシーケンスは「\(バックスラッシュ)」と何らかの文字列を組み合わせることで、文字列中のデータを特殊な文字として解釈することが可能となります。
例えばJavaでは文字列を表現する際に「”(ダブルクォーテーションマーク)」を使用するため、ダブルクォーテーションマークをそのまま記述すると文字列の始まりまたは終わりと解釈されてしまいます。
もし文字列の中でダブルクォーテーションマークをそのまま出力したい場合には「\”」と記述することで、「”」ダブルクォーテーションマークのまま文字列として出力することが可能です。
エスケープシーケンスの代表例
Javaで良く利用されるエスケープシーケンスの代表例をご紹介します。
- \n : 改行
- \t : タブ
- \’ : シングルクォーテーション
- \” : ダブルクォーテーション
- \\ : バックスラッシュ
- \xxx : 8進数の文字コード
- \uxxx : 16進数の文字コード
Javaでエスケープシーケンスを使用したサンプル
では実際に代表例としてご紹介したエスケープシーケンスを使用したサンプルコードを確認してみましょう。
改行
System.out.println("文章の途中で\n改行されます。"); System.out.println("こちらはn改行されません。");
実行結果
文章の途中で 改行されます。 こちらはn改行されません。
「\n」は改行文字として判定されますが、バックスラッシュを付けない場合そのまま「n」と出力されています。
タブ
System.out.println("文章の途中で\tタブが入ります。"); System.out.println("こちらはtタブとは認識されません。");
実行結果
文章の途中で タブが入ります。 こちらはtタブとは認識されません。
シングルクォーテーション
System.out.println('\''); // System.out.println('''); こちらはコンパイルエラーとなり実行出来ません。
実行結果
'
Javaでは文字列はダブルクォーテーションで囲みますが、文字リテラルの場合シングルクォーテーションで囲って表現します。
ただし「’」を文字リテラルとして出力したい場合には、上記のようにエスケープシーケンスを利用しないとエラーとなるため注意が必要です。
ダブルクォーテーション
System.out.println("文字列の途中に\"ダブルクォーテーションマークが表示されます。"); // System.out.println("これは"ダブルクォーテーションマークの数が一致しないのでエラーとなり実行出来ません。");
実行結果
文字列の途中に"ダブルクォーテーションマークが表示されます。
シングルクォーテーションと同じように、文字列中にダブルクォーテーションマークを表示したい場合エスケープシーケンスが必要です。
バックスラッシュ
System.out.println("文字列の途中に\\バックスラッシュが表示されます。"); // System.out.println("これは\無効なエスケープシーケンスのためエラーとなります。");
実行結果
文字列の途中に\バックスラッシュが表示されます。
8進数の文字コード
System.out.println("エスケープシーケンス \101 \102 \103"); System.out.println("エスケープシーケンスなし 101 102 103");
実行結果
エスケープシーケンス A B C エスケープシーケンスなし 101 102 103
エスケープシーケンスを使用すると対応する文字コードに変換されて出力されます。
16進数の文字コード
System.out.println("エスケープシーケンス \u0041 \u0042 \u0043"); System.out.println("エスケープシーケンスなし u0041 u0042 u0043");
実行結果
エスケープシーケンス A B C エスケープシーケンスなし u0041 u0042 u0043
16進数で指定する場合にはバックスラッシュの直後に「u」を指定します。
Javaの正規表現でエスケープシーケンスを使う
Javaプログラムにおいて、エスケープシーケンスを利用する機会の多い正規表現についても確認しておきましょう。
正規表現の特殊文字
まず正規表現のなかで頻繁に利用される特殊文字を一覧で掲載します。
- 「.」: 任意の1文字
- 「*」: 直前の1文字を繰り返し(0回以上)
- 「^」: 行の先頭
- 「$」: 行の末尾
- 「?」: 直前の文字と一致またはなし
正規表現でエスケープシーケンスを使ったサンプル
メタ文字が含まれる場合エスケープシーケンスを利用することになります。
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String regex1 = "あい.えお"; String regex2 = "あい\\.えお"; String str1 = "あいうえお"; String str2 = "あい.えお"; Pattern pattern1 = Pattern.compile(regex1); Pattern pattern2 = Pattern.compile(regex2); Matcher matcher1 = pattern1.matcher(str1); Matcher matcher2 = pattern2.matcher(str1); Matcher matcher3 = pattern1.matcher(str2); Matcher matcher4 = pattern2.matcher(str2); System.out.println(matcher1.matches()); System.out.println(matcher2.matches()); System.out.println(matcher3.matches()); System.out.println(matcher4.matches()); } }
実行結果
true false true true
正規表現の場合「.」は任意の1文字となるため「regex1」には「str1」も「str2」も一致することになります。
ただし「regex2」ではエスケープシーケンスを指定しているため文字列で「あい.えお」のみが一致します。
結果、サンプルのように「regex2」と「str1」の組み合わせはエラーとなりました。
サンプルでは「.」を使用していますが、他の特殊文字でも同じようにエスケープシーケンスが必要です。
さいごに: Javaでのエスケープシーケンスの使い方を把握しておこう
本記事では、Javaプログラミングで特殊文字を表現するために利用するエスケープシーケンスの使い方をご紹介してきました。
エスケープシーケンスが必要な場面は意外と多いため、プログラミング学習を進めるうちに何度も対応する必要があり、自然と使えるようになっていきます。
最初から全てを覚える必要はないため、エスケープシーケンスの概念を理解した上で必要に応じて検索しながら使いこなせるように学習を進めていきましょう。
Mac環境を想定した解説です。
Windows環境などでは「¥」マークが利用されるため読み替えが必要です。