Javaで文字列の先頭と末尾のスペースを削除する方法|trim・strip・全角スペース対応

ユーザー入力やファイルから読み込んだ文字列には、前後に余計なスペースが付いていることがよくあります。Javaでは trim() で簡単に取り除けますが、全角スペースは trim() では消えないという落とし穴があります。この記事では、基本の trim() から全角対応の strip()、先頭だけ・末尾だけの削除、すべての空白を除去する方法まで、実用パターンを整理します。

この記事の結論:前後のスペース削除は trim() が基本ですが、全角スペースまで除去したいならJava 11以降の strip() を使います。先頭だけなら stripLeading()、末尾だけなら stripTrailing() が使えます。
スポンサーリンク

trim()で前後のスペースを削除する(基本)

String クラスの trim() は、文字列の先頭と末尾にある空白を取り除いた新しい文字列を返します(元の文字列は変更されません)。

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() もあります。

strip / 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+
Java 11以降なら基本は strip() を推奨します。全角スペースなどにも対応でき、想定外の取りこぼしが減ります。古い環境との互換性が必要な場合のみ trim() を使います。

文字列中のすべての空白を除去したい場合

trim() / strip() はあくまで前後の空白だけを取り除きます。文字列の途中も含めてすべての空白を消したいときは、replaceAll() で正規表現を使います。

すべての空白を除去
String s = "a b c\td";

// 半角・全角スペース・タブなどすべての空白を除去(\s は全角スペースも対象)
String noSpace = s.replaceAll("\\s", "");
System.out.println(noSpace); // abcd
改行(\n\r\n)だけを除去・置換したい場合は文字列から改行を除去・置換する方法が参考になります。

nullに注意する

trim()strip() は文字列のメソッドなので、対象が null だと NullPointerException になります。先に null チェックを入れましょう。

null安全に整形する
String clean = (input == null) ? "" : input.strip();

よくある質問(FAQ)

Qtrim()で全角スペースが消えないのはなぜですか?
Atrim()文字コードが U+0020 以下の文字しか削除しないためです。全角スペース(U+3000)は対象外です。全角も消したい場合はJava 11以降の strip() を使ってください。
Q先頭だけ、末尾だけ削除したいです。
AJava 11以降なら stripLeading()(先頭)と stripTrailing()(末尾)が使えます。それぞれ片側のUnicode空白だけを取り除きます。
Q文字列の途中の空白も全部消したいです。
AreplaceAll("\\s", "") を使います。\s は半角・全角スペースやタブなどの空白にマッチするため、前後だけでなく途中の空白も除去できます。
Qtrim()とstrip()はどちらを使うべきですか?
AJava 11以降なら strip() を推奨します。全角スペースを含むUnicodeの空白に対応しているためです。古いJavaとの互換性が必要な場合のみ trim() を使います。

まとめ

Javaで前後のスペースを削除するポイントを整理します。

  • 前後のスペース削除の基本は trim()
  • 全角スペースは trim() では消えない(U+0020 以下のみが対象)
  • 全角も消すならJava 11以降の strip()
  • 片側だけは stripLeading() / stripTrailing()
  • 途中も含めて全部消すなら replaceAll("\\s", "")

関連として、空白のみの項目にtrimを適用したときの挙動文字列から改行を除去・置換する方法isEmptyメソッドの使い方もあわせて読むと、文字列の整形・チェックに強くなれます。