web-dev-qa-db-ja.com

文字列の先頭と末尾から改行を削除する方法(Java)

空白行が続くテキストを含む文字列があります。パーツにテキストを保持し、末尾から空白の改行を削除する最良の方法は何ですか?

114
Confiqure

String.trim() メソッドを使用して、文字列の先頭と末尾から空白(スペース、改行など)を取り除きます。

String trimmedString = myString.trim();
253
Crozin
String.replaceAll("[\n\r]", "");
25
John B

文字列が潜在的にnullである場合、 StringUtils.trim() -null-safeバージョンの String.trim() の使用を検討してください。

2
entpnerd

tl; dr

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が対象とするコードポイントのこのリストに改行が含まれている可能性が高いと思います。

  • Unicodeスペース文字(SPACE_SEPARATOR、LINE_SEPARATOR、またはPARAGRAPH_SEPARATOR)ですが、改行しないスペース( '\ u00A0'、 '\ u2007'、 '\ u202F')でもありません。
  • '\ t'、U + 0009水平タブレーションです。
  • それは '\ n'、U + 000A LINE FEEDです。
  • '\ u000B'、U + 000B VERTICAL TABULATIONです。
  • '\ f'、U + 000Cフォームフィードです。
  • '\ r'、U + 000Dキャリッジリターンです。
  • '\ u001C'、U + 001Cファイルセパレーターです。
  • '\ u001D'、U + 001D GROUP SEPARATORです。
  • それは '\ u001E'、U + 001Eレコードセパレーターです。
  • '\ u001F'、U + 0です
1
Basil Bourque
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])$", "") + "]");
  1. 文字列の開始= ^、
  2. 文字列の終わり= $、
  3. 正規表現の組み合わせ= | 、
  4. 改行=\r\n | [\ n\x0B\x0C\r\u0085\u2028\u2029]
1
hmmh

私も同じ質問をしていましたが、提供された答えでは十分ではなかったため、これにも答えを追加します。いくつかの考えを考えると、これは正規表現を使用して非常に簡単に実行できることに気付きました。

先頭から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] + "-");

これは、文字列をトリミングするための最もパフォーマンスが効率的な方法ではないことは確かです。ただし、このような操作をインライン化する最もクリーンでシンプルな方法のようです。

単純な正規表現であるため、同じ方法を使用して、両端の文字のバリエーションと組み合わせをトリミングできることに注意してください。

0
Zhro