HOWTO · Java
Java でタブスペースを挿入する方法
エスケープシーケンス、Unicode U+0009、文字列構築の代替手段を使って、Java で水平タブを挿入する方法を学びます。
このページの内容
Javaで文字列の間に水平タブを入れるには、文字列リテラル内にエスケープシーケンス \t を記述します。タブによって次の文字列は次のタブストップまで移動します。表示される間隔は、出力を表示するプログラムによって異なります。
次の例を実行します。
Javaで \t のタブエスケープシーケンスを使ってタブを挿入する
Javaソースでは、バックスラッシュと t が1つのエスケープシーケンスを構成します。Javaは文字列を作成するときにこれをタブ文字へ変換するため、タブを入れたい位置に記述します。
public class TabExample {
public static void main(String[] args) {
System.out.println("Name:\tAda");
}
}
このプログラムは、Name:、水平タブ、Ada の順に1行で出力します。ターミナルやエディターなど、出力を表示する環境がタブストップの幅を決めるので、見える空きは一定数の空白とは限りません。
JavaでUnicode文字を使ってタブを挿入する
水平タブはUnicodeコードポイント U+0009 です。JavaソースではUnicodeエスケープ \u0009 も認識されるため、値の間に連結すればその位置にタブを挿入できます。詳しくはUnicode文字のリファレンスを参照してください。Unicodeは文字の符号化方式に関する標準であり、すべての文字を固定の16ビットで符号化するものではありません。
次の完全な例では、2つの値の間にUnicodeエスケープを使います。表示される出力には水平タブが含まれますが、その幅は出力環境のタブストップによって変わります。
public class TabExample {
public static void main(String[] args) {
String tab = "\u0009";
System.out.println("Name:" + tab + "Ada");
}
}
Name: Ada
通常のJava文字列では、"\t" が同じ水平タブ文字を表す、より短く馴染みのある書き方です。
Javaで String.format を使って空白で幅をそろえる
String.format は書式文字列に従って値を整形します。フィールド幅を指定すると、短い値には空白が追加されます。タブ文字が挿入されるわけではありません。この完全な例では、Name: の幅を最低10文字にするため、Ada の前に5つの空白が入ります。
public class TabExample {
public static void main(String[] args) {
String formatted = String.format("%-10s%s", "Name:", "Ada");
System.out.println(formatted);
}
}
Name: Ada
データに実際のタブを含める場合は \t を使います。空白による幅埋めが目的ならフィールド幅を使います。どちらの場合も、プロポーショナルフォントを使うと列が不ぞろいに見えることがあり、値が指定した幅を超えた場合にも整列が崩れることがあります。
Javaで StringBuilder または StringBuffer を使ってタブを挿入する
複数の要素から文字列を組み立てるときは、要素のつなぎ目にタブを追加します。この例では、どちらのクラスでも同じ方法で文字列を作り、Name: と Ada の間に '\t' を追加します。
public class TabExample {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder();
builder.append("Name:").append('\t').append("Ada");
System.out.println(builder);
StringBuffer buffer = new StringBuffer();
buffer.append("Name:").append('\t').append("Ada");
System.out.println(buffer);
}
}
Name: Ada
Name: Ada
StringBuffer の操作は同期されますが、StringBuilder の操作は同期されません。常にどちらかが速いと決めつけず、バッファの操作に同期が必要かどうかで選びます。どちらも段階的に文字列を組み立てる用途に適しています。短く固定された文字列なら、値を "\t" で連結するほうが簡潔です。タブの表示幅は出力環境によって変わります。
Javaで System.out.print を複数回使ってタブを挿入する
各要素を System.out.print で出力すると同じ行に続けて表示できます。最後の値には println を使い、行を終わらせます。呼び出しの間にあるタブは、出力環境が決める次のタブストップまで移動します。
public class TabExample {
public static void main(String[] args) {
System.out.print("Name:");
System.out.print('\t');
System.out.println("Ada");
}
}
Name: Ada
要素が別々に生成される場合には、この方法が便利です。1つの式で済むなら、\t を含む文字列のほうが簡潔です。
まとめ
Java文字列に水平タブをそのまま入れるには \t を使います。U+0009 と \u0009 は同じタブ文字を表し、String.format のフィールド幅は簡単な位置合わせのために空白を追加します。StringBuilder、StringBuffer、複数回のprint呼び出しを使えば、文字列を組み立てたり出力したりする途中にタブを挿入できます。次の値までの見かけの間隔は、出力環境のタブストップによって変わります。