右寄せは「桁をそろえて“数字やコードを読みやすくする”」技
左寄せが「文字を左にそろえて見やすくする」技だとしたら、
右寄せは「数字や桁ものを右にそろえて、比較しやすくする」技です。
固定長ファイル、帳票、コンソール出力、ログなどで、
金額・数量・ID・連番などを右にそろえておくと、縦に並べたときに一気に読みやすくなります。
[ 123][ 100000][ 5]
人間の目は「右端をそろえた数字」を見たほうが、桁の違いを直感的に理解しやすいんですよね。
右寄せとパディングの関係を整理する
「右寄せ=左側パディング(多くはスペースかゼロ)」という発想
文字列の右寄せは、パディングの観点で見るとこう整理できます。
右寄せしたい
→ 右側はそのまま
→ 左側に「足りない分だけ」何かを埋める
つまり、「左パディング」です。
パディングの3要素で言うと、こうなります。
何を:対象の文字列(多くは数字やコード)
どちら側に:左側
何で:スペース ' ' か、ゼロ '0' など
数字を右寄せしたいときは、左側をスペースで埋めるか、ゼロで埋めるかを決めます。
固定長ファイルや帳票では、
「数値項目は右寄せ・左ゼロ埋め」や「右寄せ・左スペース埋め」といったルールがよく出てきます。
基本実装:左側スペース埋めで右寄せする
「見た目をそろえるための右寄せ」
まずは、指定した幅で右寄せする基本ユーティリティを作ります。
ここでは「左側スペース埋め=見た目をそろえる右寄せ」を実装します。
public final class Align {
private Align() {}
public static String right(String text, int width) {
if (text == null) {
text = "";
}
if (text.length() >= width) {
return text;
}
StringBuilder sb = new StringBuilder(width);
int padCount = width - text.length();
for (int i = 0; i < padCount; i++) {
sb.append(' ');
}
sb.append(text);
return sb.toString();
}
}
Java使い方はこうなります。
System.out.println("[" + Align.right("123", 8) + "]"); // [ 123]
System.out.println("[" + Align.right("5", 8) + "]"); // [ 5]
System.out.println("[" + Align.right(null, 5) + "]"); // [ ]
System.out.println("[" + Align.right("とても長い", 4) + "]"); // [とても長い]
Javaここで深掘りしたい重要ポイントは三つです。
一つ目は、「足りない分だけ左側にスペースを詰めている」ことです。width - text.length() で必要なパディング数を計算し、その分だけスペースを先頭に追加しています。
これが「右寄せ」の正体です。
二つ目は、「null を空文字として扱っている」ことです。null が来ても落ちずに、指定幅ぶんスペースだけの文字列を返します。
固定長ファイルや帳票では「空欄=スペース埋め」がよくあるので、この挙動は実務と相性がいいです。
三つ目は、「長すぎる場合はそのまま返している」ことです。
ここは要件次第で、「長すぎるときは左側を切る」「例外にする」などに変えても構いません。
大事なのは、「プロジェクトとしてどうするか」を決めて、ユーティリティにそのルールを閉じ込めることです。
ゼロ埋め右寄せ:数値項目の“ガチ業務仕様”
「右寄せ+左ゼロ埋め」で桁をそろえる
金額やIDなどの数値項目では、「右寄せ+左ゼロ埋め」がよく使われます。
これは見た目のためだけでなく、「固定桁で扱う」という意味も強いです。
public final class Align {
private Align() {}
public static String rightZero(String text, int width) {
if (text == null) {
text = "";
}
if (text.length() >= width) {
return text;
}
StringBuilder sb = new StringBuilder(width);
int padCount = width - text.length();
for (int i = 0; i < padCount; i++) {
sb.append('0');
}
sb.append(text);
return sb.toString();
}
}
Java使い方はこうです。
System.out.println("[" + Align.rightZero("123", 8) + "]"); // [00000123]
System.out.println("[" + Align.rightZero("5", 8) + "]"); // [00000005]
System.out.println("[" + Align.rightZero(null, 5) + "]"); // [00000]
Javaここでのポイントは、「右寄せの考え方はそのままに、“埋める文字”だけをスペースからゼロに変えている」ことです。
右寄せの本質は「左側パディング」なので、スペースかゼロかは用途の違いにすぎません。
例題:固定長ファイルで数値項目を右寄せする
「文字は左寄せ、数字は右寄せ」というお約束
固定長ファイルの仕様書には、よくこう書いてあります。
文字項目:左寄せ、右スペース埋め
数値項目:右寄せ、左ゼロ埋め
さっきの左寄せと組み合わせると、1レコードをこんなふうに組み立てられます。
public final class FixedRecord {
private FixedRecord() {}
public static String buildRecord(String customerId, String amount) {
// 顧客ID:8桁、右寄せゼロ埋め
String idPart = Align.rightZero(customerId, 8);
// 金額:10桁、右寄せスペース埋め(ここでは文字列として扱う例)
String amountPart = Align.right(amount, 10);
return idPart + amountPart;
}
}
Java使い方はこうです。
String record = FixedRecord.buildRecord("123", "5000");
System.out.println("[" + record + "]");
System.out.println("length=" + record.length());
// [00000123 5000]
// length=18
Javaここで深掘りしたいのは、「“右寄せ+何で埋めるか”というルールを、項目ごとにコードとして明示している」ことです。Align.rightZero(customerId, 8) を見れば、「顧客IDは8桁ゼロ埋め右寄せなんだな」とすぐ分かります。
仕様書の一行を、そのままユーティリティ呼び出しとして表現するイメージです。
例題:コンソール出力やログで数字の桁をそろえる
右寄せで「数字の列」を読みやすくする
ログやコンソール出力で、数字を右寄せしておくと、
縦に並べたときに桁の違いが一目で分かります。
public final class LogNumbers {
private LogNumbers() {}
public static void printRow(String label, int value) {
String l = Align.left(label, 10); // 左寄せ(前回作ったものを使う想定)
String v = Align.right(String.valueOf(value), 8); // 右寄せ
System.out.println(l + " : " + v);
}
}
Java使い方はこうです。
LogNumbers.printRow("count", 5);
LogNumbers.printRow("count", 123);
LogNumbers.printRow("count", 10000);
Java出力イメージはこんな感じです。
count : 5
count : 123
count : 10000
ここでのポイントは、「ラベルは左寄せ、数字は右寄せにして“表っぽいログ”を作っている」ことです。
左寄せと右寄せを組み合わせることで、
人間がパッと見て理解しやすい出力を作れます。
例題:String.format との違いと使い分け
フォーマット指定子でも右寄せはできる
Java の String.format でも、右寄せは簡単に書けます。
String s1 = String.format("%8d", 123); // [ 123]
String s2 = String.format("%8s", "5"); // [ 5]
System.out.println("[" + s1 + "]");
System.out.println("[" + s2 + "]");
Java%8d や %8s は「幅8、右寄せ」の意味です。
では、なぜ自前ユーティリティ Align.right や Align.rightZero を用意するのか。
一つ目の理由は、「フォーマット文字列が読みにくくなりがち」だからです。"%8d" や "%08d" に慣れていない人にとっては、意味が一瞬で分かりません。Align.rightZero(id, 8) のほうが、「8桁ゼロ埋め右寄せなんだな」と直感的に伝わります。
二つ目の理由は、「業務ルールを“名前付き”で表現したい」からです。
固定長ファイルや帳票の仕様をフォーマット文字列に閉じ込めてしまうと、
あとから読んだときに「これは何桁で、右寄せなのか左寄せなのか」が分かりづらくなります。Align.right(amount, 10) のように書いておけば、「10桁右寄せ」という情報がそのままコードに残ります。
String.format は複雑なフォーマットを一発でやりたいときに使い、
「右寄せだけ」「ゼロ埋めだけ」のような業務ルールはユーティリティにしておく――
そんな使い分けが現場ではしっくりきます。
まとめ:右寄せユーティリティで身につけたい感覚
右寄せは、「数字や桁ものを右端でそろえて、人間にも機械にも扱いやすくする」ためのテクニックであり、
実装としては「左側パディング(スペースかゼロ)」のシンプルな応用です。
押さえておきたい感覚は、まず「右寄せ=左側パディング」としてパディングの一種として捉えること。
次に、「スペース埋めかゼロ埋めかを用途ごとに決め、Align.right と Align.rightZero のような“用途が分かる薄いラッパー”を用意する」こと。
そして、「固定長ファイル・帳票・ログ・コンソールなど、文脈ごとの“幅”と“寄せ方”を、メソッド呼び出しとしてコードに刻み、仕様書とコードのズレを減らす」ことです。
