[解決済み] Java 11におけるString trim()メソッドとstrip()メソッドの違いについて
質問
JDK 11 では、他の変更点の中で、java.lang.String クラスに 6 つの新しいメソッドが導入されています。
-
repeat(int)
- で指定された回数だけ文字列を繰り返します。int
パラメータ -
lines()
- Spliterator を使って、ソース文字列から遅延的に行を提供します。 -
isBlank()
- Stringが空であるか、空白文字のみを含むかどうかを示す -
stripLeading()
- 先頭の空白を削除します -
stripTrailing()
- 末尾の空白を削除します -
strip()
- 文字列の先頭と末尾の空白を削除します。
具体的には
strip()
と非常によく似ています。
trim()
. と同じように
本記事
strip*()
メソッドが設計されています。
String.strip()、String.stripLeading()、String.stripTrailing()は メソッドは、空白文字 [Character.isWhiteSpace() によって決定される] を切り詰めます。 の前面、背面、または前面と背面の両方から削除します。 文字列です。
String.trim()
JavaDocの状態です。
/**
* Returns a string whose value is this string, with any leading and trailing
* whitespace removed.
* ...
*/
というのは、上の引用とほとんど同じです。
とは、具体的にどのような違いがあるのでしょうか?
String.trim()
と
String.strip()
Java 11以降?
解決方法を教えてください。
要するに
strip()
は、ユニコードに対応した
trim()
. 意味
trim()
は文字 <= U+0020 (スペース) のみを削除します。
strip()
は、Unicode の空白文字をすべて削除します (ただし、制御文字 (\0 など) はすべて削除されません)。
問題点
String::trimは、Javaの初期にUnicodeが登場したときから存在していた。
<ブロッククオートは、今日広く使われている標準まで完全には進化していませんでした。
String::trimが使用するスペースの定義は、以下のコードポイントです。 一般にスペースコードポイント( \u0020 )と呼ばれるものです。 をASCIIまたはISO制御文字と呼びます。
ユニコードを意識したトリミングルーチンは Character::isWhitespace(int) です。
さらに、開発者は、具体的に
インデントの空白や末尾の空白を特別に削除することはできません。
を使用します。
解決方法
Unicodeの空白を意識したトリミング方法を導入する。 を追加し、先頭のみ、または末尾のみの制御を提供する。
これらの新しいメソッドの共通の特徴は、以下のような古いメソッドとは異なる(新しい)ホワイトスペースの定義を使っていることです。
String.trim()
. バグ
JDK-8200373
.
現在のString::trimのJavaDocでは、どの の定義が使用されています。コード内で使用されている 近い将来、別のトリミングメソッドが登場する予定です。 スペースの定義を明確にすることが必要です。String::trim は と等しいかそれ以下のコードポイントをスペースと定義しています。 新しいトリミング方式では、スペース文字のコードポイント( \u0020 )が使用されます。 を返すコードポイントを(空白)の定義として使用します。 に渡されたとき、Character::isWhitespace述語を使用します。
メソッド
isWhitespace(char)
に追加されました。
Character
は、JDK 1.1ではメソッド
isWhitespace(int)
は導入されませんでした。
Character
クラスは、JDK 1.5までは 後者のメソッド (型のパラメータを受け入れるもの) は
int
) が追加され、補助文字に対応した。のJavadocコメントでは
Character
クラスは、BMP文字(通常、1文字でモデル化)と補足文字(通常、intベースの"コードポイント"でモデル化)を定義しています。
U+0000からU+FFFFまでの文字の集合を「U+0000」と呼ぶことがあります。 を基本多言語面(BMP)と呼びます。コードポイント を超えるものを補助文字と呼びます。Java プラットフォームは、UTF-16 表現を文字配列と StringおよびStringBufferクラス。この表現では、補足的な は一対の文字値として表現されます。char値です。 したがって、BMP(Basic Multilingual Plane)コードポイントを表します。 サロゲートコードポイントを含む、UTF-16のコードユニット。 エンコーディングになります。int 値は、すべての Unicode コードポイント(以下を含む)を表します。 補足コードポイント ... charしか受け付けないメソッドは の値は,補助文字に対応できない。... を使用するメソッドは int 値を受け取る場合、Unicode のすべての文字がサポートされ、その中には 補助文字
OpenJDK 変更点 .
のベンチマーク比較
trim()
と
strip()
-
Java 11では、空白文字列に対してString.strip()はString.trim()よりも5倍速い理由
関連
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Javascriptで文字列の最後の文字を切り取るにはどうしたらいいですか?
-
[解決済み] Javaで文字列を分割する方法
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] JavaScriptで文字列をトリムする?
-
[解決済み] 文字列から空白を取り除くには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
をインスタンス化することができません。
-
javaで非静的な解を静的な参照にすることができない
-
javaの模造品QQ WeChatのチャットルーム
-
Enumとの組み合わせでswitchの使い方を一度覚えるために必要な定数式
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 4 at text.Division.main(Divisi
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
[解決済み】Javaの文字列から先頭と末尾の空白を取り除く