「空白削除」タグアーカイブ

Java:trimだけじゃない!前後の空白を完全に除去する方法

Javaで文字列の前後の空白を削除したいとき、多くの人がまず trim() を使います。しかし、実務で扱うデータはもっと複雑。
実は trim() では 取り除けない空白 が存在します。

この記事では、

  • trim() の弱点

  • 完全に空白除去したいときのベストプラクティス

  • 実務(CSV・外部連携・Webアプリ)でのよくある落とし穴

をわかりやすく整理します。


■ trim() は万能ではない:取り除けない空白がある

trim() はあくまで Unicodeの制御文字(0x00–0x20) のみを対象にしています。

▼ trim()で削除できる例

  • 半角スペース " "

  • タブ \t

  • 改行 \n

  • 復帰 \r

▼ trim()で削除できない代表例

  • 全角スペース( )

  • ノーブレークスペース( )

  • ゼロ幅スペース(\u200B)

  • 特殊なUnicode空白

外部システム連携やExcel由来データで**“見えないゴミ空白”**が混入し、trim()では除去できないケースは非常に多いです。


■ 前後の空白を「完全に」除去する方法

① 正規表現による空白除去(最も汎用的)

▼ ポイント

  • \s = 制御文字+一般的な空白

  • \p{Z} = Unicodeの空白カテゴリ(全角スペースなど)

  • 前後どちらも削除できる

trim() では消えない全角・特殊スペースもまとめて除去できます。


■ ② Apache Commons Langの StringUtils を使う方法(簡単)

Apache Commons Lang が使えるなら、こちらが最も便利。

▼ trim()との違い

  • 全角スペースも削除できる

  • Unicode空白に幅広く対応

外部システムとの連携が多い業務システムでは定番です。


■ ③ カスタム実装で「ホワイトリスト方式」

どの空白を除去するかを 自分で定義したい場合

よく問題になる空白だけに絞りたいときに有効です。


■ 比較表:どの方法を使うべき?(実務ベース)

方法メリットデメリット実務での利用度
trim()標準、軽量、速い全角スペースに弱い
正規表現完全除去できる少し処理が重い
Apache StringUtils記述が最も簡単ライブラリが必要
カスタムRegex精密に制御可能コードの読みにくさ

■ 実務で多いトラブル例

● CSVインポート時に項目が一致しない

→ Excel入力データに 全角スペース が混入している
→ trim() では削除されずバリデーションNG

● 外部システムのレスポンス整形で意図せず不一致

→ JSONのフィールドに ノーブレークスペース が入っていた

● Webフォームの入力チェックで正しく弾けない

→ ゼロ幅スペース(\u200B)が悪さをしていた

Javaの文字列処理では 目に見えないUnicode空白 がしばしば問題を起こします。


■ まとめ:trim() だけに頼らないこと!

前後の空白を 100%除去 したいなら、

  1. 正規表現(\s + \p{Z})

  2. StringUtils.trim()

このどちらかが“安全策”です。

業務システム、外部連携、CSV処理など “実データを扱う場面” では trim() だけでは不十分なことが多いため、ぜひ今回の方法を取り入れてみてください。