ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
trim とは
String.trim() は、文字列の先頭と末尾にある空白文字を取り除いて新しい文字列を返すメソッドです。文字列の途中にある空白はそのまま残ります。
シグネチャ
| 修飾子と型 | メソッド | 戻り値 |
|---|---|---|
public String | trim() | 先頭と末尾の空白を削除した文字列 |
基本的な使い方
String s = " Hello World ";
String t = s.trim();
System.out.println("[" + t + "]"); // [Hello World]
System.out.println(s.length()); // 17(元は不変)
System.out.println(t.length()); // 11
Java の String はイミュータブル(不変)です。trim() は元の文字列を書き換えず、新しい文字列を返すので、必ず戻り値を変数で受け取る必要があります。
取り除かれる「空白」の定義
JavaDoc によると、trim() は「' '(半角スペース)以下のコードポイント」を空白として扱います。具体的には次が含まれます。
| 文字 | コードポイント | 説明 |
|---|---|---|
| スペース | U+0020 | 半角スペース |
| 水平タブ | U+0009 | \t |
| 改行 | U+000A | \n LF |
| 復帰 | U+000D | \r CR |
| 垂直タブ | U+000B | \v |
| FF(改ページ) | U+000C | \f |
| 各種制御文字 | U+0000 〜 U+001F | NUL・BEL 等 |
つまり改行コード CRLF / LF も含めて取り除けます。一行入力をパースする際に readLine() の戻り値を trim() しておくと安全です。
全角スペースは取り除けない
U+3000(全角スペース)はコードポイントが 0x3000 で U+0020 より大きいため、trim() では取り除かれません。日本語入力ではよくある罠です。
String zen = " ABC "; // 全角スペース挟みのABC
System.out.println("[" + zen.trim() + "]");
// 出力: [ ABC ] 全角スペースは残る
Java 11 以降は strip() を推奨
Java 11 で導入された String.strip() は Unicode の Character.isWhitespace() 定義に基づいて空白を判定するため、全角スペースも含めて取り除けます。新しいコードでは strip() のほうが安全です。
| メソッド | 導入 | 全角スペース | 判定基準 |
|---|---|---|---|
trim() | JDK 1.0 | 取り除かない | U+0020 以下のコードポイント |
strip() | Java 11 | 取り除く | Character.isWhitespace |
stripLeading() | Java 11 | 取り除く | 先頭のみ |
stripTrailing() | Java 11 | 取り除く | 末尾のみ |
String s = " Hello ";
System.out.println("[" + s.trim() + "]"); // [ Hello ]
System.out.println("[" + s.strip() + "]"); // [Hello]
典型的なユースケース
- 入力フォームの前処理 — 余分なスペース付きで送られてきた値を正規化
- CSV / TSV のパース — 区切り文字の前後に余白が混ざるケースで利用
- ログのパース — 改行や行末空白を取り除いて比較
- プロパティファイルや設定ファイルの読み込み
よくある誤用
- 戻り値を捨てる —
str.trim();だけでは元のstrは変わらない。str = str.trim();と代入する - null 安全でない — null に対して
trim()を呼ぶと NPE。Objects.requireNonNullElseやラッパで対策する - 全角スペース込みで処理したい —
strip()を使うか、str.replaceAll("\\s+$", "")等の正規表現を使う
null 安全に呼ぶイディオム
// Apache Commons Lang を使うパターン
String t = StringUtils.trim(input); // input が null でも null を返すだけ
// 自前
String t = (input == null) ? null : input.trim();
// Java 9 以降の Optional
String t = Optional.ofNullable(input).map(String::trim).orElse("");
// 空白だけの文字列を空とみなす
boolean isBlank = (input == null || input.trim().isEmpty());
// Java 11 以降は isBlank() メソッドが使える
boolean isBlank2 = (input == null || input.isBlank());
trim と他メソッドの組み合わせ
実務では trim() 単独ではなく、他のメソッドと連結することが多いです。
// CSV パース時の前処理
String[] cols = line.split(",");
for (int i = 0; i < cols.length; i++) {
cols[i] = cols[i].trim(); // 各カラムの空白を除去
}
// プロパティ値の正規化(前後空白除去 + 小文字化)
String key = rawKey.trim().toLowerCase();
// 空文字判定(Java 11 前)
if (input != null && !input.trim().isEmpty()) {
process(input.trim());
}
パフォーマンスの注意
trim() は新しい String オブジェクトを生成します。1 万件のループで毎回 trim() を呼んでも、現代の JVM では問題にならない速度ですが、同じ文字列に対して何度も呼ぶのは無駄です。一度結果を変数に格納して使い回しましょう。なお、内容が変わらなかった場合(先頭末尾に空白がない場合)は元の文字列をそのまま返す最適化が入っているため、追加のメモリ確保も発生しません。
FAQ
Q: trim() は何文字目までを「空白」とみなす?
A: コードポイントが 0x0020 以下のすべての文字(半角スペース、タブ、改行、各種制御文字)です。0x0020 より大きいコードポイント(全角スペース U+3000 など)は対象外です。
Q: 内部の空白も削除したい
A: str.replaceAll("\\s+", "") で全空白を削除できます。\\s は Java の正規表現で空白文字全般にマッチします。
Q: 連続する空白を 1 つにまとめたい
A: str.trim().replaceAll("\\s+", " ") のように trim() と組み合わせます。
関連
- 文字列 — 親カテゴリ
- String.length
- 文字列の置換(replace)
- String.equalsIgnoreCase
- Java — カテゴリトップ
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?