C#の文字列の末尾から改行と改行を削除する


回答:


198

これにより、の末尾から改行と改行の組み合わせが削除されますs

s = s.TrimEnd(new char[] { '\r', '\n' });

編集:またはJPが親切に指摘するように、次のようにもっと簡潔に綴ることができます:

s = s.TrimEnd('\r', '\n');

10
TrimEndの宣言のparamsキーワードに注意してください。これにより、配列の代わりに文字の複数のインスタンスを渡すことができます。 msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
JP Alioto

3
これはどうですか:s = s.TrimEnd(System.Environment.NewLine.ToCharArray());
ΕГИІИО

4
私はv1.0がリリースされてから(10年前)c#を書いています。次に、TrimEndについて教えてください。どー!
s15199d

7
興味があるだけで、本当に必要なのはs = s.TrimEnd()-ドキュメントが言うように: trimCharsがnullまたは空の配列の場合、代わりにUnicodeの空白文字が削除されます。-String.TrimEndを
スチュアートウッド

@StuartWood:... Avikが要求したものではありません。彼はのために特別に尋ねた'\r''\n'し、他には何もなく、空白文字' 'インスタンス。
RichieHindle 2013年

31

これはうまくいくはずです...

var tst = "12345\n\n\r\n\r\r";
var res = tst.TrimEnd( '\r', '\n' );

19

複数のプラットフォームを使用している場合は、この方法を使用する方が安全です。

value.TrimEnd(System.Environment.NewLine.ToCharArray());

異なる改行文字と復帰文字が考慮されます。


JPの方法-- tst.TrimEnd( '\r', '\n' )主要なEOLは[現在] \rとの\n組み合わせが異なるだけなので、実際には合理的に「安全」ですが、alexwの方法が「正しい」答えです。CLRに、このプラットフォームの改行に含まれる文字を教えてください。 EOLは常に0Dと0Asのコンボではありませんでした
ルフィン

以前は使用してEnvironment.NewLineいましたが、\rなしで存在するインスタンスを処理するようには見えませんでした\nTrimEnd('r','\n')この場合、より信頼できるようです。
ᴍᴀᴛᴛʙᴀᴋᴇʀ

2
これは実際にはクロスプラットフォームの問題である可能性があり、decはシステム環境の内容に関係なく、両方を明確に削除する必要があります。
Andrew Hill

12
String temp = s.Replace("\r\n","").Trim();

s元の文字列です。(注大文字)


11
また、1)文字列の中央から\ r \ nを削除し、2)文字列の先頭から空白文字を削除し、3)文字列の末尾から空白文字を削除します。
RichieHindle 2009年

確かに、最後に/ r / nを1つだけと想定しました。元の投稿には記載されていませんでした。warrentが-1票を投じているかどうかはわかりません
Crash893

まさに私が探していたもの。ありがとう。
NotMe

4
仕事を一人で行うことができるときreplace()、それからtrim()過剰ではなく使用しTrimEnd()ていますか、それとも何か不足していますか?
ᴍᴀᴛᴛʙᴀᴋᴇʀ

素晴らしい提案@MattBaker
Crash893

8
s.TrimEnd();

上記は、文字列の末尾から「\ r \ n」を削除するために必要なすべてです。

投票の答えは私には間違っているようです。最初に、私が試したときにそれは機能しませんでした、次に、それが機能した場合、s.TrimEnd( '\ r'、 '\ n')は'\ r'または '\ n'のいずれかのみを削除することを期待します、それで私はそれを私の文字列に対して2回実行する必要があります-'\ n'が最後にあったときと2回目は '\ r'が最後にあったとき(今度は '\ n'が削除された) 。


4

常に単一のCRLFがある場合は、次のようになります。

myString = myString.Substring(0, myString.Length - 2);

ある場合もない場合も、次のようになります。

Regex re = new Regex("\r\n$");
re.Replace(myString, "");

これらの両方(設計による)は、最大で1つのCRLFを削除します。パフォーマンスのために正規表現をキャッシュします。


4

私たちにとってVBers:

TrimEnd(New Char() {ControlChars.Cr, ControlChars.Lf})

3
string k = "This is my\r\nugly string. I want\r\nto change this. Please \r\n help!";
k = System.Text.RegularExpressions.Regex.Replace(k, @"\r\n+", " ");

3

これは簡単すぎました。私にとっては、特定のメールアイテムを除外しています。独自のカスタムメールジャンクフィルターを作成しています。文字列に\ rおよび/または\ nを使用すると、フィルタリングの代わりにすべてのアイテムが消去されていました。

したがって、filter = filter.Remove( '\ n')およびfilter = filter.Remove( '\ r')を実行しました。エンドユーザーがメモ帳を使用してファイルを直接編集できるようにフィルターを作成しているので、これらの文字がどこに埋め込まれているのかわからない-文字列の先頭または末尾以外にある可能性があります。したがって、それらをすべて削除することでそれが実現します。

他のエントリはすべて機能しますが、削除が最も簡単でしょうか?

私はこの投稿からRegexについてかなり多くのことを学びました-ここでの使用でかなりクールな仕事。


ちょうどあなたができるように見えますfilter = filter.Remove('\n').Remove('\r');
ジョン・サンダース

2

消去レベルを多用しています

String donen = "lots of stupid whitespaces and new lines and others..."

//Remove multilines
donen = Regex.Replace(donen, @"^\s+$[\r\n]*", "", RegexOptions.Multiline);
//remove multi whitespaces
RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);
donen = regex.Replace(donen, " ");
//remove tabs
char tab = '\u0009';
donen = donen.Replace(tab.ToString(), "");
//remove endoffile newlines
donen = donen.TrimEnd('\r', '\n');
//to be sure erase new lines again from another perspective
donen.Replace(Environment.NewLine, "");

そして今、私たちはきれいな1行を持っています



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.