概要
帳票出力や固定長ファイル連携では、数値のゼロ埋めや文字列の右揃え・左揃えが頻繁に必要になります。また、フォーム入力や CSV 取込では前後の空白を除去するトリム処理が欠かせません。Java には String.format によるパディングと trim / strip によるトリムが用意されていますが、trim が全角スペースを除去しないことを知らないまま本番障害に至るケースは珍しくありません。この記事では、業務でよく使うパディングパターン(ゼロ埋め、右揃え、固定長レコード)とトリム処理(trim / strip / stripLeading / stripTrailing)を整理し、Java 8 と Java 11 以降の動作の違い、全角スペースへの対処法も含めて解説します。
使いどころ
請求書番号を8桁ゼロ埋め(例: 42 → 00000042)して採番テーブルや帳票に出力する
銀行の全銀フォーマットや固定長ファイルで、氏名を全角20文字の左揃え・金額を右揃えで出力する
CSV 取込時にセルの前後に混入した半角・全角スペースを strip で除去し、DB 格納前にデータを正規化する
コード例
public class PaddingTrimUtil {
/** 数値を指定桁数でゼロ埋め */
public static String zeroPad(int number, int width) {
return String.format("%0" + width + "d", number);
}
/** 文字列を指定幅で右揃え(左スペース埋め) */
public static String rightAlign(String text, int width) {
return String.format("%" + width + "s", text);
}
/** 文字列を指定幅で左揃え(右スペース埋め) */
public static String leftAlign(String text, int width) {
return String.format("%-" + width + "s", text);
}
/** 固定長レコードの組み立て(帳票・バッチ向け) */
public static String buildFixedRecord(String name, int price) {
return String.format("%-10s%10d円", name, price);
}
/** Unicode 対応トリム(全角スペースも除去) */
public static String safeTrim(String input) {
if (input == null) {
return null;
}
return input.strip(); // Java 11+
}
/** 先頭のみトリム */
public static String trimLeading(String input) {
if (input == null) {
return null;
}
return input.stripLeading(); // Java 11+
}
public static void main(String[] args) {
// ゼロ埋め
System.out.println(zeroPad(42, 5)); // 00042
System.out.println(zeroPad(42, 8)); // 00000042
// 揃え
System.out.println("[" + rightAlign("Java", 10) + "]"); // [ Java]
System.out.println("[" + leftAlign("Java", 10) + "]"); // [Java ]
// 固定長レコード
System.out.println("[" + buildFixedRecord("りんご", 1500) + "]");
// トリム
System.out.println("[" + safeTrim("\u3000Java\u3000") + "]"); // [Java]
System.out.println("[" + safeTrim(" Hello ") + "]"); // [Hello]
// strip vs trim
String fullWidthSpace = "\u3000データ\u3000";
System.out.println("trim: [" + fullWidthSpace.trim() + "]"); // 全角残る
System.out.println("strip: [" + fullWidthSpace.strip() + "]"); // 全角も除去
}
}Version Coverage
strip() / stripLeading() / stripTrailing() で Unicode 空白を一括除去できる。repeat() で任意文字のパディングも簡潔に書ける。
// Java 17: strip() で全角スペースも除去 String input = "\u3000Java\u3000"; String trimmed = input.strip(); // "Java" // repeat() でゼロ埋め String num = "42"; String padded = "0".repeat(5 - num.length()) + num; // 00042
Library Comparison
注意点
trim() は ASCII 制御文字(コード 0x20 以下)しか除去しない。全角スペース(U+3000)を含む Unicode 空白は strip()(Java 11+)を使う
String.format("%05d", num) は int / long にしか使えない。文字列のゼロ埋めには String.format と組み合わせるか、repeat() で自前パディングする
日本語文字列を String.format("%10s") でパディングすると、全角1文字が幅1としてカウントされるため、固定長ファイルのバイト数と合わなくなる
stripLeading() / stripTrailing() は Java 11 以降でのみ使える。Java 8 環境では正規表現で代用する必要がある
FAQ
Java 11 以降であれば strip() を推奨します。trim() は全角スペースを除去できませんが、strip() は Unicode 基準で空白文字を判定するため、日本語データの処理で安全です。
String.format のパディングは文字数ベースのため、バイト数で揃える場合は getBytes(charset).length でバイト数を計算し、不足分をスペースで埋める自前処理が必要です。
String.format("%05d", num) でゼロ埋めできます。文字列のパディングは StringBuilder に insert(0, '0') を繰り返すか、char[] を Arrays.fill で初期化する方法があります。