ユーザー入力やファイルから読み込んだ文字列には、前後に余計なスペースが付いていることがよくあります。Javaでは trim() で簡単に取り除けますが、全角スペースは trim() では消えないという落とし穴があります。この記事では、基本の trim() から全角対応の strip()、先頭だけ・末尾だけの削除、すべての空白を除去する方法まで、実用パターンを整理します。
trim() が基本ですが、全角スペースまで除去したいならJava 11以降の strip() を使います。先頭だけなら stripLeading()、末尾だけなら stripTrailing() が使えます。trim()で前後のスペースを削除する(基本)
String クラスの trim() は、文字列の先頭と末尾にある空白を取り除いた新しい文字列を返します(元の文字列は変更されません)。
String original = " こんにちは、世界! ";
String trimmed = original.trim();
System.out.println("[" + original + "]"); // [ こんにちは、世界! ]
System.out.println("[" + trimmed + "]"); // [こんにちは、世界!]
trim() はスペースだけでなく、タブ(\t)や改行(\n)なども取り除きます。正確には、文字コードが U+0020(半角スペース)以下の文字が対象です。
全角スペースはtrim()では消えない
ここが要注意点です。全角スペース( =U+3000)は U+0020 より大きいため、trim() では除去されません。日本語の入力フォームでは全角スペースが混ざりやすいので、実務では落とし穴になりがちです。
String s = " テキスト "; // 前後は全角スペース
System.out.println("[" + s.trim() + "]"); // [ テキスト ](変化なし)
trim() を通しても空になりません。空白のみの入力を弾く処理を書くときは特に注意が必要です。詳しい挙動は空白のみの項目にtrimを適用したときの挙動で解説しています。strip()なら全角スペースも削除できる(Java 11+)
Java 11で追加された strip() は、Unicodeの空白判定に基づいて前後の空白を取り除くため、全角スペースもまとめて削除できます。先頭だけ・末尾だけを削除する stripLeading() / stripTrailing() もあります。
String s = " テキスト ";
System.out.println("[" + s.strip() + "]"); // [テキスト]
System.out.println("[" + s.stripLeading() + "]"); // [テキスト ]
System.out.println("[" + s.stripTrailing() + "]"); // [ テキスト]
| メソッド | 対象 | 全角スペース | 導入 |
|---|---|---|---|
trim() |
U+0020 以下の文字 | 残る | 古くから |
strip() |
Unicodeの空白 | 消える | Java 11+ |
stripLeading() |
先頭のUnicode空白 | 消える | Java 11+ |
stripTrailing() |
末尾のUnicode空白 | 消える | Java 11+ |
strip() を推奨します。全角スペースなどにも対応でき、想定外の取りこぼしが減ります。古い環境との互換性が必要な場合のみ trim() を使います。文字列中のすべての空白を除去したい場合
trim() / strip() はあくまで前後の空白だけを取り除きます。文字列の途中も含めてすべての空白を消したいときは、replaceAll() で正規表現を使います。
String s = "a b c\td";
// 半角・全角スペース・タブなどすべての空白を除去(\s は全角スペースも対象)
String noSpace = s.replaceAll("\\s", "");
System.out.println(noSpace); // abcd
nullに注意する
trim() や strip() は文字列のメソッドなので、対象が null だと NullPointerException になります。先に null チェックを入れましょう。
String clean = (input == null) ? "" : input.strip();
よくある質問(FAQ)
trim() は文字コードが U+0020 以下の文字しか削除しないためです。全角スペース(U+3000)は対象外です。全角も消したい場合はJava 11以降の strip() を使ってください。stripLeading()(先頭)と stripTrailing()(末尾)が使えます。それぞれ片側のUnicode空白だけを取り除きます。replaceAll("\\s", "") を使います。\s は半角・全角スペースやタブなどの空白にマッチするため、前後だけでなく途中の空白も除去できます。strip() を推奨します。全角スペースを含むUnicodeの空白に対応しているためです。古いJavaとの互換性が必要な場合のみ trim() を使います。まとめ
Javaで前後のスペースを削除するポイントを整理します。
- 前後のスペース削除の基本は
trim() - 全角スペースは
trim()では消えない(U+0020 以下のみが対象) - 全角も消すならJava 11以降の
strip() - 片側だけは
stripLeading()/stripTrailing() - 途中も含めて全部消すなら
replaceAll("\\s", "")
関連として、空白のみの項目にtrimを適用したときの挙動・文字列から改行を除去・置換する方法・isEmptyメソッドの使い方もあわせて読むと、文字列の整形・チェックに強くなれます。
