入門じゃないJava(5)

こんにちは。

今日も楽しくJavaを見ていきましょう。

 

前回は基本型の縮小変換と拡大変換についてみていきましたね。

creators.hateblo.jp

 

今回はエスケープシーケンス(拡張表記)についてみていきたいと思います。

 

エスケープシーケンス(拡張表記)

エスケープシーケンスでよく知られているのは\nや\tあたりでしょうか?

当ブログでも度々出ていると思います。

一般に\(バックスラッシュ)を先頭にした文字列で、それが何か一つの機能として振る舞うようなものものを一般にエスケープシーケンス(拡張表記とも)と言います。

エスケープシーケンスは文字リテラル、文字列リテラル内で利用されます。

 

ここで、エスケープシーケンスの例を示します。

エスケープシーケンス 意味
¥b バックスペース
¥t 水平タブ
¥n 改行
¥r 復帰
¥f 書式送り
¥' シングルクオーテーション
¥" ダブルクオーテーション
¥¥ ¥文字
¥ooo (oooは8進数) 8進数でoooの値を持つ文字
ユニコードエスケープ 意味
¥uhhhh (hhhhは16進数) 16進数でhhhhの値を持つ文字

 参考:柴田 望洋 (2016) .『新・明解Java入門』p170 Table 5-6

 

エスケープシーケンスを眺めていると一見複数の文字列を表すのではないかと思われるかもしれませんが、これはこのエスケープシーケンスのワンセットでカウントされるのであくまで単一の文字です。

 

\b・・・バックスペース(後退)

 \bを出力すると、現表示位置がその行内での直前の位置に移動します。

現在位置とは、出力先がコンソール画面であれば、カーソル位置の事です。

現表示位置が行の先頭にあるときに後退を出力した結果は規定されていません。多くの環境では前の行(上の行)にはカーソルを戻せないからです。

 

\f・・・書式送り

 \fを出力すると現表示位置が次の論理ページの先頭位置に移動します。

通常の環境では書式送りをコンソール画面へ出力しても何も起こりません。

プリンタへの出力において改ページを行う際に利用します。

 

\n・・・改行

 改行\nを出力すると現表示位置が次の行の先頭に移動します。

 

\r・・・復帰

復帰\rを出力すると、、現表示位置がその行の先頭に移動します。

画面に復帰を出力すると表示済みの文字を書き換えることができます。

下に参考文献によるスマートな例を示します。

class CarriageReturn {
    public static void main(String[] args) {
        System.out.print("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
        System.out.println("\r12345");
    }
}

実行結果

12345FGHIJKLMNOPQRSTUVWXYZ
C:\Java\04>_

なお、かぼす的ぐちゃぐちゃな例は以下になります。

import java.util.Random;
class RoopProgress {
    public static void main(String[] args) {
        Random rnd = new Random();
        System.out.println("━━━━処理Rを開始します。━━━━");
        System.out.print(" 00%の処理が完了しました。");
        for(int i = 0; i < 100; i++) {
            System.out.printf("\r %2d", i);
        }
        int n;
        //0から9999999までの乱数を発生させ、7が出現したらループを抜ける
        do {
            n = rnd.nextInt(9999999);
        }while(n != 7);
        System.out.print("\r100");
        System.out.println();
    }
}

実行結果

━━━━処理Rを開始します。━━━━
100%の処理が完了しました。
C:\Java\04>_

 

 おそらく今までは、

実行結果

━━━━処理Rを開始します。━━━━
 00%の処理が完了しました。
 01%の処理が完了しました。
 02%の処理が完了しました。
 03%の処理が完了しました。
・・・中略・・・
 97%の処理が完了しました。
 98%の処理が完了しました。
 99%の処理が完了しました。
100%の処理が完了しました。
C:\Java\04>_

となっていたハズなのでこれだけでもとてもいい感じです。

 

\t・・・水平タブ

 水平タブ\tを出力させると。現表示位置がその行における次の水平タブ位置に移動します。なお、現表示位置が、行における最後の水平タブ位置にある場合や、その位置を過ぎている場合の動作は規定されていません。

class HorizontalTab {
    public static void main(String[] args) {
        System.out.println("ABC\t123");
    }
}

実行結果

ABC     123
C:\Java\04>_

 

 水平タブ位置はOSなどの環境に依存するため、実行によって表示されるABCと123の間の余白の幅は環境によって異なります。

 

ということで今日はここまでにしましょう。

 

参考文献

柴田 望洋 (2016) .『新・明解Java入門』170-171