Menghapus carriage return dan new-line dari ujung string di c #

113

Bagaimana cara menghapus karakter carriage return (\r)dan karakter baris baru (\n)dari akhir string?

Avik
sumber

Jawaban:

198

Ini akan memotong semua kombinasi pengembalian kereta dan baris baru dari akhir s:

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

Sunting : Atau seperti yang ditunjukkan JP dengan ramah, Anda dapat mengejanya dengan lebih ringkas sebagai:

s = s.TrimEnd('\r', '\n');
RichieHindle
sumber
10
Catat kata kunci params dalam deklarasi TrimEnd, ini memungkinkan Anda meneruskan beberapa contoh karakter alih-alih array. msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
JP Alioto
3
Bagaimana dengan ini: s = s.TrimEnd (System.Environment.NewLine.ToCharArray ());
Ε Г И І И О
4
Saya telah menulis c # sejak v1.0 keluar (10 tahun yang lalu). Sekarang Anda ceritakan tentang TrimEnd. Doh!
s15199d
7
Hanya karena minat, yang Anda butuhkan hanyalah s = s.TrimEnd()- seperti yang dikatakan dokumen: Jika trimChars adalah null atau array kosong, karakter spasi kosong Unicode akan dihapus. - lihat String.TrimEnd
Stuart Wood
@StuartWood: ... bukan itu yang diminta Avik. Dia meminta secara khusus '\r'dan '\n'dan tidak ada yang lain, bukan karakter spasi ' 'misalnya.
RichieHindle
31

Ini harus bekerja ...

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

Jika Anda menggunakan banyak platform, Anda lebih aman menggunakan metode ini.

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

Ini akan menjelaskan baris baru yang berbeda dan karakter carriage-return.

Alex Wiese
sumber
Metode JP - tst.TrimEnd( '\r', '\n' )- cukup "aman" dalam prakteknya karena EOL mayor [saat ini] hanyalah kombinasi yang berbeda dari \rdan \n, tetapi alexw adalah jawaban yang "benar". Biarkan CLR memberi tahu Anda karakter apa yang ada di baris baru platform ini. EOL tidak selalu merupakan kombinasi 0D dan 0A
ruffin
Saya biasa menggunakan Environment.NewLinetetapi tampaknya tidak menangani contoh di mana \rada tanpa \n. TrimEnd('r','\n')tampaknya lebih dapat diandalkan dalam kasus ini.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
2
Bisa jadi ini sebenarnya adalah masalah lintas platform, dan dec perlu secara khusus menghapus kedua \ r \ n, terlepas dari apa yang dikatakan lingkungan sistem.
Andrew Hill
12
String temp = s.Replace("\r\n","").Trim();

smenjadi string asli. (Catatan ibu kota)

Crash893
sumber
11
Itu juga akan: 1) Hapus \ r \ n dari tengah string, 2) Hapus karakter spasi kosong dari awal string, dan 3) hapus karakter spasi putih apa pun dari akhir string.
RichieHindle
Benar, saya berasumsi hanya satu / r / n di akhir. Itu tidak disebutkan di postingan aslinya. Saya tidak yakin bahwa memberikan suara -1
Crash893
Persis apa yang saya cari. Terima kasih.
NotMe
4
Apakah menggunakan replace()kemudian trim()tidak berlebihan ketika TrimEnd()dapat melakukan pekerjaan itu sendiri, atau saya kehilangan sesuatu?
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
saran bagus @MattBaker
Crash893
8
s.TrimEnd();

Di atas adalah semua yang saya butuhkan untuk menghapus '\ r \ n' dari ujung string saya.

Jawaban yang disukai tampaknya salah bagi saya. Pertama, itu tidak bekerja ketika saya mencoba, kedua, jika itu berhasil aku akan berharap bahwa s.TrimEnd ( '\ r', '\ n') hanya akan menghapus baik sebuah '\ r' atau '\ n' , jadi saya harus menjalankannya di atas string saya dua kali - sekali untuk saat '\ n' berada di akhir dan kedua kalinya saat '\ r' berada di akhir (sekarang setelah '\ n' dilepas) .

martinp999
sumber
4

Jika selalu ada satu CRLF, maka:

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

Jika mungkin memilikinya atau mungkin tidak, maka:

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

Keduanya (menurut desain), akan menghapus paling banyak satu CRLF. Cache regex untuk kinerja.

Matthew Flaschen
sumber
4

Bagi kami para VBers:

TrimEnd(New Char() {ControlChars.Cr, ControlChars.Lf})
Simon
sumber
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+", " ");
vnRock
sumber
3

Ini terlalu mudah - bagi saya, saya memfilter item email tertentu. Saya sedang menulis filter sampah email khusus saya sendiri. Dengan \ r dan / atau \ n dalam string itu menghapus semua item alih-alih memfilter.

Jadi, saya baru saja melakukan filter = filter.Remove ('\ n') dan filter = filter.Remove ('\ r'). Saya membuat filter saya sedemikian rupa sehingga pengguna akhir dapat menggunakan Notepad untuk mengedit file secara langsung sehingga tidak ada yang tahu di mana karakter ini dapat menyematkan diri - bisa jadi selain di awal atau akhir string. Jadi menghapus semuanya berarti melakukannya.

Entri lainnya semuanya berfungsi tetapi Hapus mungkin yang paling mudah?

Saya belajar lebih banyak tentang Regex dari posting ini - pekerjaan yang cukup keren dengan penggunaannya di sini.

pengguna1585204
sumber
Sepertinya Anda bisa melakukannyafilter = filter.Remove('\n').Remove('\r');
John Saunders
2

Saya menggunakan banyak level penghapusan

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, "");

dan sekarang kita memiliki satu baris bersih

matasoy
sumber
0
varName.replace(/[\r\n]/mg, '')                                              
Menepuk
sumber
0

Inilah yang saya harus bekerja untuk saya.

s.Replace("\r","").Replace("\n","")
Jordan Mahsman
sumber