空白行が続くテキストを含む文字列があります。パーツにテキストを保持し、末尾から空白の改行を削除する最良の方法は何ですか?
String.trim()
メソッドを使用して、文字列の先頭と末尾から空白(スペース、改行など)を取り除きます。
String trimmedString = myString.trim();
String.replaceAll("[\n\r]", "");
文字列が潜在的にnull
である場合、 StringUtils.trim()
-null-safeバージョンの String.trim()
の使用を検討してください。
String cleanString = dirtyString.strip() ; // Call new `String::string` method.
String::strip…
古い String::trim
メソッドには strange definition of whitespace があります。
here で説明したように、Java 11はString
クラスに新しい strip…
メソッドを追加します。これらは、空白のよりUnicodeに精通した定義を使用します。 Character::isWhitespace
については、クラスJavaDocのこの定義のルールを参照してください。
サンプルコード。
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");
または、 先頭のみ または 末尾のみ の空白を削除できます。
code point(s) が改行を構成するものについて正確に言及していません。 strip
が対象とするコードポイントのこのリストに改行が含まれている可能性が高いと思います。
String trimStartEnd = "\n TestString1 linebreak1\nlinebreak2\nlinebreak3\n TestString2 \n";
System.out.println("Original String : [" + trimStartEnd + "]");
System.out.println("-----------------------------");
System.out.println("Result String : [" + trimStartEnd.replaceAll("^(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])|(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])$", "") + "]");
私も同じ質問をしていましたが、提供された答えでは十分ではなかったため、これにも答えを追加します。いくつかの考えを考えると、これは正規表現を使用して非常に簡単に実行できることに気付きました。
先頭からnewlinesを削除するには:
// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);
System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");
および文字列の終わり:
// Trim right
String z = "\n\nfrom the end\n\n";
System.out.println("-" + z.split("\\n+$", 2)[0] + "-");
これは、文字列をトリミングするための最もパフォーマンスが効率的な方法ではないことは確かです。ただし、このような操作をインライン化する最もクリーンでシンプルな方法のようです。
単純な正規表現であるため、同じ方法を使用して、両端の文字のバリエーションと組み合わせをトリミングできることに注意してください。