左寄せは「人間が読むために“左側をそろえる”」技
パディングの話で「左パディング」「右パディング」をやりましたが、
その中でも 左寄せ は「人間が読むときの見やすさ」に直結するテクニックです。
固定長ファイル、帳票、コンソール出力、ログなどで、
「文字は左に詰めて、余ったところをスペースで埋める」――これが左寄せです。
[山田 ][エラー ][OK ]
こうやって左側を揃えておくと、縦に並べたときに内容が一気に読みやすくなります。
左寄せとパディングの関係を整理する
「左寄せ=右側パディング(スペース埋め)」という発想
文字列の左寄せは、パディングの観点で見るととてもシンプルです。
左寄せしたい
→ 左側はそのまま
→ 右側に「足りない分だけ」スペースを埋める
つまり、「右パディング(スペース埋め)」そのものです。
パディングの3要素で言うと、こうなります。
何を:対象の文字列
どちら側に:右側
何で:スペース ' '
この「左寄せ=右側スペースパディング」という感覚を持っておくと、
実装も設計もスッと頭に入ってきます。
基本実装:右側スペース埋めで左寄せする
null や短すぎる・長すぎる場合の扱いも決めておく
まずは、指定した幅で左寄せする基本ユーティリティを作ります。
public final class Align {
private Align() {}
public static String left(String text, int width) {
if (text == null) {
text = "";
}
if (text.length() >= width) {
return text;
}
StringBuilder sb = new StringBuilder(width);
sb.append(text);
int padCount = width - text.length();
for (int i = 0; i < padCount; i++) {
sb.append(' ');
}
return sb.toString();
}
}
Java使い方はこうなります。
System.out.println("[" + Align.left("山田", 8) + "]"); // [山田 ]
System.out.println("[" + Align.left("OK", 8) + "]"); // [OK ]
System.out.println("[" + Align.left(null, 5) + "]"); // [ ]
System.out.println("[" + Align.left("とても長い名前", 4) + "]"); // [とても長い名前]
Javaここで深掘りしたい重要ポイントは三つです。
一つ目は、「null を空文字として扱っている」ことです。null が来ても落ちずに、指定幅ぶんスペースだけの文字列を返します。
固定長ファイルや帳票では「空欄=スペース埋め」がよくあるので、この挙動は実務と相性がいいです。
二つ目は、「長さが足りないときだけスペースを追加している」ことです。width - text.length() で足りない分を計算し、その数だけスペースを右側に詰めています。
これが「左寄せ」の正体です。
三つ目は、「長すぎる場合はそのまま返している」ことです。
ここは要件次第で、「長すぎるときは右側を切る」「例外にする」などに変えても構いません。
大事なのは、「プロジェクトとしてどうするか」を決めて、ユーティリティにそのルールを閉じ込めることです。
例題:固定長ファイルで文字項目を左寄せする
「文字は左寄せ、数字は右寄せ」という世界
固定長ファイルでは、よくこういうルールがあります。
文字項目:左寄せ、右側スペース埋め
数値項目:右寄せ、左側ゼロ埋め
このうち、文字項目の左寄せは、さきほどの Align.left がそのまま使えます。
public final class FixedTextField {
private FixedTextField() {}
public static String formatName(String name) {
// 氏名は20桁、左寄せ(右スペース埋め)
return Align.left(name, 20);
}
}
Java使い方はこうです。
String field = FixedTextField.formatName("山田太郎");
System.out.println("[" + field + "]");
System.out.println("length=" + field.length());
// [山田太郎 ]
// length=20
Javaここでのポイントは、「“この項目は左寄せで何桁”という仕様を、ユーティリティ呼び出しとしてコードに刻んでいる」ことです。
仕様書に「氏名:20桁、左詰め」と書いてあるなら、
コード側には Align.left(name, 20) と書いておく――これが一番ズレにくい形です。
例題:コンソール出力やログで列をそろえる
左寄せで「表っぽいログ」を作る
ログやコンソール出力で、項目名やステータスを左寄せしておくと、
縦に並べたときに視認性がかなり上がります。
public final class LogTable {
private LogTable() {}
public static void printRow(String status, String message) {
String s = Align.left(status, 10);
System.out.println(s + " | " + message);
}
}
Java使い方はこうです。
LogTable.printRow("OK", "処理が完了しました");
LogTable.printRow("WARN", "入力値が不正です");
LogTable.printRow("ERROR", "DB接続に失敗しました");
Java出力イメージはこんな感じです。
OK | 処理が完了しました
WARN | 入力値が不正です
ERROR | DB接続に失敗しました
ここでのポイントは、「左寄せで“列の開始位置”をそろえている」ことです。Align.left(status, 10) によって、どんな長さのステータスでも10文字分の幅を確保し、
そのあとに | やメッセージを続けることで、表のように見やすいログになります。
例題:String.format との違いと使い分け
フォーマット指定子でも左寄せはできる
Java の String.format でも、左寄せは書けます。
String s = String.format("%-10s", "OK"); // 左寄せ、幅10、右スペース埋め
System.out.println("[" + s + "]"); // [OK ]
Java%-10s は「左寄せ、幅10、文字列」という意味です。
では、なぜ自前ユーティリティ Align.left を用意するのか。
理由は主に二つです。
一つ目は、「フォーマット文字列が読みにくい」からです。"%-10s" に慣れていない人にとっては、意味が一瞬で分かりません。Align.left(status, 10) のほうが、「ステータスを左寄せしているんだな」と直感的に伝わります。
二つ目は、「業務ルールを“名前付き”で表現したい」からです。
固定長ファイルや帳票の仕様を String.format のフォーマット文字列に閉じ込めてしまうと、
あとから読んだときに「これは何桁で、左寄せなのか右寄せなのか」が分かりづらくなります。Align.left(name, 20) のように書いておけば、「20桁左寄せ」という情報がそのままコードに残ります。
String.format は一発で複雑なフォーマットをするときに便利で、
「左寄せだけ」「右寄せだけ」のような単機能は、ユーティリティメソッドにしておく――
そんな使い分けが現場ではしっくりきます。
まとめ:左寄せユーティリティで身につけたい感覚
左寄せは、「人間が読むときに左側をそろえて、見やすくする」ためのテクニックであり、
実装としては「右側スペースパディング」のシンプルな応用です。
押さえておきたい感覚は、まず「左寄せ=右側スペース埋め」としてパディングの一種として捉えること。
次に、「null や長すぎる文字列の扱いをプロジェクトとして決め、そのルールを Align.left のようなユーティリティに閉じ込める」こと。
そして、「固定長ファイル・帳票・ログ・コンソールなど、文脈ごとの“幅”と“寄せ方”を、メソッド呼び出しとしてコードに刻む」ことです。
