文字列の最初と最後から改行を削除するにはどうすればよいですか?


129

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



1
いいえ、ちがいます。リンクでの質問は...ではなく「置き換え」について尋ねている
ファイズ

回答:


277

String.trim()メソッドを使用して、文字列の最初と最後から空白(スペース、改行など)を削除します。

String trimmedString = myString.trim();

18
問題は改行です。これにより、改行だけでなく
mmm

21
String.replaceAll("[\n\r]", "");

14
Bro、@ JohnB文字列間のすべての改行文字も削除されます。要求は、先頭と末尾の改行文字のみを削除することです。
シッダールタ2017

5

tl; dr

String cleanString = dirtyString.strip() ; // Call new `String::string` method.

String::strip…

古いString::trimメソッドには、奇妙な空白の定義があります

ここで説明したように、Java 11はクラスに新しいstrip…メソッドを追加しますString。これらは、よりUnicodeに詳しい空白の定義を使用しています。のクラスJavaDocでこの定義のルールを参照してくださいCharacter::isWhitespace

コード例。

String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");

または、先頭または末尾の空白のみを削除することもできます。

改行を構成するコードポイントについては正確に言及していません。あなたの改行はおそらく次の対象となるコードポイントのリストに含まれていると思いますstrip

  • これはUnicodeスペース文字(SPACE_SEPARATOR、LINE_SEPARATOR、またはPARAGRAPH_SEPARATOR)ですが、改行なしスペース( '\ u00A0'、 '\ u2007'、 '\ u202F')でもありません。
  • 「\ t」、U + 0009 HORIZONTAL TABULATIONです。
  • '\ n'、U + 000A LINE FEEDです。
  • '\ u000B'、U + 000B VERTICAL TABULATIONです。
  • '\ f'、U + 000Cフォームフィードです。
  • '\ r'、U + 000Dキャリッジリターンです。
  • '\ u001C'、U + 001C FILE SEPARATORです。
  • '\ u001D'、U + 001D GROUP SEPARATORです。
  • '\ u001E'、U + 001E RECORD SEPARATORです。
  • '\ u001F'、U + 0

4

このJavaコードは、質問のタイトルで尋ねられていることを正確に実行します。つまり、「string-javaの最初と最後から改行を削除します」:

String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")

行末からのみ改行を削除します。

String.replaceAll("[\n\r]$", "")

行の先頭からのみ改行を削除します。

String.replaceAll("^[\n\r]", "")

あなたの答えに追加のコンテキストを提供できますか?そうすれば、誰もがコードの機能と理由を理解できます。
マリアーノゾリラ

回答に説明を追加しました。私は今それが明確であることを望みます。
アレクサンダーサモイロフ


1
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]

0

同じ質問がありましたが、提供された回答では不十分だったため、これにも回答を追加します。少し考えてみたところ、これは正規表現を使用すると非常に簡単に実行できることがわかりました。

最初から改行を削除するには:

// 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] + "-");

これは、文字列をトリミングする最も効率的な方法ではないと確信しています。しかし、それはそのような操作をインライン化するための最もクリーンで最も簡単な方法のようです。

単純な正規表現であるため、同じ方法を使用して、文字のバリエーションや組み合わせを両端からトリミングすることもできます。


ええ、でも最初/最後の行数がわからない場合はどうしますか?ソリューションでは、どちらの場合も改行が2つあると想定しています
LukaGovedič18年

の2番目のパラメーターsplit()は単なる制限です。何度でもマッチしたい場合はオフにしてください。
Zhro

0

これを試して

function replaceNewLine(str) { 
  return str.replace(/[\n\r]/g, "");
}

0

文字列の最初と最後(中間ではない)の(スペースやタブでなく)改行のみを削除する場合は、次の方法を使用できます。

正規表現を使用して、文字列の先頭()と末尾()から改行(\\r)と改行()を削除します。\\n^$

 s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "")

完全な例:

public class RemoveLineBreaks {
    public static void main(String[] args) {
        var s = "\nHello\nWorld\n";
        System.out.println("before: >"+s+"<");
        s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "");
        System.out.println("after: >"+s+"<");
    }
}

それは出力します:

before: >
Hello
World
<
after: >Hello
World<

-3
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");

2
これは質問に正しく答えません。最初と最後のCRとLFだけでなく、すべてのCRとLFを削除します。
james.garriss

これにより、最初と最後だけでなく、すべてが置き換えられます。
Hamzeh Soboh 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.