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


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');

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' );

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.


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)


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) .


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.


4

Bagi kami para 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

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.


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



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.