17.

Java で文字列の先頭・末端を削除する方法完全ガイド

編集
この記事の要点
  • 空白だけを削除: String.trim() (ASCII 空白) / String.strip() (Java 11+、Unicode 空白対応)
  • 先頭だけ stripLeading()、末尾だけ stripTrailing()
  • 任意の 1 文字削除: str.substring(1, str.length() - 1)
  • 正規表現: str.replaceAll("^.|.$", "") で先頭・末尾 1 文字、^\s+|\s+$ で空白
  • commons-lang3: StringUtils.strip(str, "削除する文字") で指定文字を両端から削除

空白を削除: trim / strip

もっとも一般的な「先頭・末尾の空白削除」は trim() / strip() で行います。Java 11 以降はUnicode 空白(全角スペース U+3000 等)も削除できる strip() を推奨。

String s = "  hello world  ";

s.trim();          // "hello world" — U+0020 以下のみ削除
s.strip();         // "hello world" — Unicode 空白も削除 (Java 11+)
s.stripLeading();  // "hello world  "
s.stripTrailing(); // "  hello world"

// 全角スペースを含む例
String z = "  全角空白  ";  // 全角スペース U+3000
z.trim();   // "  全角空白  " — 削除されない!
z.strip();  // "全角空白"          — 削除される

trim と strip の違い

メソッド導入削除対象
trim()Java 1.0U+0020 (半角スペース) 以下のコードポイント(\t \n \r 等)
strip()Java 11Character.isWhitespace(int) が true となるすべて(全角スペース U+3000、Em スペース等を含む)
stripLeading()Java 11先頭のみ
stripTrailing()Java 11末尾のみ

先頭・末尾の 1 文字を削除

String s = "(hello)";

// substring で両端 1 文字削除
String r1 = s.substring(1, s.length() - 1);   // "hello"

// 先頭 1 文字だけ
s.substring(1);                                // "hello)"

// 末尾 1 文字だけ
s.substring(0, s.length() - 1);                // "(hello"

// 安全に(空文字対策)
String safe = (s != null && s.length() >= 2)
    ? s.substring(1, s.length() - 1) : "";

正規表現で削除

String s = "***hello***";

// 先頭・末尾 1 文字を削除
s.replaceAll("^.|.$", "");          // "**hello**"

// 先頭の * 連続を削除
s.replaceAll("^\\*+", "");          // "hello***"

// 末尾の * 連続を削除
s.replaceAll("\\*+$", "");          // "***hello"

// 両端の * を削除
s.replaceAll("^\\*+|\\*+$", "");    // "hello"

// 両端の空白(trim 相当)
String t = "  abc  ";
t.replaceAll("^\\s+|\\s+$", "");    // "abc"

// 改行を含む文字列の先頭・末尾の空白
String multi = "\n  abc  \n";
multi.replaceAll("^\\s+|\\s+$", ""); // "abc"

StringBuilder で削除

StringBuilder sb = new StringBuilder("hello");

// 末尾 1 文字
sb.deleteCharAt(sb.length() - 1);   // "hell"

// 先頭 1 文字
sb.deleteCharAt(0);                 // "ell"

// 範囲削除
sb = new StringBuilder("hello world");
sb.delete(5, 6);                    // "helloworld"(インデックス 5 のスペース削除)

// 末尾を切り詰める
sb.setLength(sb.length() - 1);      // 末尾 1 文字削除
sb.setLength(3);                    // 先頭 3 文字だけ残す

commons-lang3 StringUtils.strip()

Apache Commons の StringUtils.strip(str, stripChars)指定した文字を両端から削除できます。null も安全に扱えます。

import org.apache.commons.lang3.StringUtils;

StringUtils.strip(null);          // null
StringUtils.strip("");            // ""
StringUtils.strip("   abc   ");   // "abc"   — 空白
StringUtils.strip("abcXY", "XY"); // "abc"
StringUtils.strip("**abc**", "*"); // "abc"
StringUtils.stripStart("***abc", "*"); // "abc"
StringUtils.stripEnd("abc***", "*");   // "abc"
StringUtils.stripAccents("café");      // "cafe" — アクセント削除

用途別の使い分け

削除したいもの推奨
両端の空白(ASCII)str.trim()
両端の空白(全角含む)str.strip() (Java 11+)
先頭・末尾の 1 文字str.substring(1, str.length() - 1)
先頭・末尾の任意の連続文字StringUtils.strip(str, "chars")
改行のみ削除(CRLF 対応)str.replaceAll("\\r?\\n$", "")
BOM 削除str.replaceAll("^\\uFEFF", "")
大量に処理する場合StringBuilder で都度生成を避ける

典型的なユースケース

// 1. CSV の各セルの前後空白除去
String[] cells = line.split(",");
for (int i = 0; i < cells.length; i++) cells[i] = cells[i].strip();

// 2. ユーザー入力の正規化
String input = request.getParameter("name");
String name = input == null ? "" : input.strip();

// 3. ダブルクォートで囲まれた文字列の外側を剥がす
String quoted = "\"hello\"";
if (quoted.startsWith("\"") && quoted.endsWith("\"")) {
    quoted = quoted.substring(1, quoted.length() - 1);
}

// 4. ファイル読み込みで末尾改行除去
String line = reader.readLine();   // BufferedReader は \n は除去済
String content = Files.readString(path).stripTrailing();

// 5. URL の末尾スラッシュ除去
String url = "https://example.com/api/";
String normalized = url.endsWith("/") ? url.substring(0, url.length() - 1) : url;

FAQ

Q: trim と strip、どちらを使うべき?
A: 全角スペースを扱う日本語環境では strip() 推奨。Java 11+ なら基本 strip()。Java 8 だと trim() しかない。

Q: 元の文字列は変わる?
A: 変わりません。String は不変 (immutable) なので、戻り値を受け取って使う必要があります。

Q: trim() が null を返すことはある?
A: ありません。null に対しては NPE。先に str == null を確認するか、StringUtils.strip() を使う。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. プラットホーム
  2. 環境構築
  3. 文法
  4. API
  5. Servlet(サーブレット)
  6. JSP
  7. Applet(アプレット)
  8. デザインパターン
  9. フレームワーク
  10. ライブラリ
  11. Androidアプリケーション
  12. Project Jigsaw
  13. エラー一覧
  14. 日付の加算、減算
  15. 文字列の数字チェック
  16. 改行コードの削除
  17. 先頭と末端の文字の削除
  18. warファイルの中身を確認する方法
  19. nullもしくは空文字の判定
  20. beanの中身を確認する方法
  21. org.apache.log4j.Logger のログ出力で printStackTrace() のエラー内容を出力する方法
  22. Javaのバージョン確認方法