C # 'da bir dizenin sonundan satır başı ve yeni satırı kaldırma


Yanıtlar:


198

Bu, aşağıdakilerin sonundan herhangi bir satırbaşı ve satırsonu kombinasyonunu kesecektir s:

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

Düzenleme : Veya JP'nin nazikçe işaret ettiği gibi, bunu daha kısa ve öz olarak şu şekilde yazabilirsiniz:

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

10
TrimEnd bildirimindeki params anahtar sözcüğüne dikkat edin, dizi yerine bir karakterin birden çok örneğini aktarmanıza izin verir. msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
JP Alioto

3
Buna ne dersiniz: s = s.TrimEnd (System.Environment.NewLine.ToCharArray ());
Ε Г И І И О

4
V1.0 çıktığından beri (10 yıl önce) c # yazıyorum. Şimdi bana TrimEnd'den bahsedin. Doh!
s15199d

7
Sadece ilgi çekici olmak üzere, gerçekten ihtiyacınız olan tek şey s = s.TrimEnd()- belgelerin dediği gibi: trimChars null veya boş bir diziyse, bunun yerine Unicode beyaz boşluk karakterleri kaldırılır. - bkz String.TrimEnd
Stuart Wood

@StuartWood: ... Avik'in istediği bu değildi. O için özel olarak istedi '\r've '\n've başka bir şey değil, boşluk karakteriyle ' 'mesela.
RichieHindle

31

Bu çalışmalı ...

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

19

Birden fazla platform kullanıyorsanız, bu yöntemi kullanmak daha güvenlidir.

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

Farklı satırsonu ve satır başı karakterlerini hesaba katacaktır.


AP'nin yöntemi - tst.TrimEnd( '\r', '\n' )- majör EOL 'larla [şu anda] sadece farklı kombinasyonları olduğundan pratikte makul "güvenli" olduğunu \rve \nancak alexw yılların "doğru" cevap. CLR size bu platformun satırsonu içinde hangi karakterlerin olduğunu söylesin. EOL her zaman 0D'ler ve 0A'ların kombinasyonu değildi
ruffin

Eskiden kullanırdım Environment.NewLineama bu, \rolmadan mevcut olan durumları idare edemiyordu \n. TrimEnd('r','\n')bu durumda daha güvenilir görünüyor.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

2
Bunun aslında bir çapraz platform sorunu olması ve dec'in, sistem ortamının ne söylediğine bakılmaksızın, her ikisini de özellikle kaldırması gerekebilir.
Andrew Hill

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

sorijinal dize olmak. (Büyük harflere dikkat edin)


11
Bu ayrıca: 1) Dizenin ortasından \ r \ n'yi kaldırır, 2) Dizenin başındaki tüm beyaz boşluk karakterlerini kaldırır ve 3) dizenin sonundaki tüm boşluk karakterlerini kaldırır.
RichieHindle

Doğru, sonunda yalnızca bir / r / n varsaydım. Orjinal gönderide bundan bahsedilmedi. -1 oyu garanti ettiğinden emin değilim
Crash893

Tam olarak aradığım şey. Teşekkürler.
NotMe

4
Kullanıyor replace()o zaman trim()değil overkill zaman TrimEnd()yalnız iş yapabilirsiniz, veya bir şey eksik?
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

harika öneri @MattBaker
Crash893

8
s.TrimEnd();

Dizimin sonundan '\ r \ n' öğesini kaldırmak için ihtiyacım olan tek şey yukarıdakilerdi.

İyileştirilen cevap bana yanlış geliyor. İlk olarak, ben işi yapsam ben s.TrimEnd ( '\ r', '\ n') sadece yer kalmayacağını beklenir, ikinci olarak çalıştığında iş vermedi ya bir '\ r' veya '\ n' , bu yüzden onu dizem üzerinde iki kez çalıştırmam gerekir - bir kez '\ n' sonunda ve ikinci kez '\ r' sonunda olduğunda (artık '\ n' kaldırıldı) .


4

Her zaman tek bir CRLF varsa, o zaman:

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

Sahip olabilir veya olmayabilirse, o zaman:

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

Bunların her ikisi de (tasarım gereği) en fazla tek bir CRLF'yi kaldıracaktır. Performans için normal ifadeyi önbelleğe alın.


4

Bizim için 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

Bu çok kolaydı - benim için belirli e-posta öğelerini filtreliyorum. Kendi özel önemsiz e-posta filtremi yazıyorum. Dizede \ r ve / veya \ n ile filtreleme yerine tüm öğeleri siliyordu.

Yani, filtre = filtre yaptım. Kaldır ('\ n') ve filtre = filtre.Kaldır ('\ r'). Filtremi, bir son kullanıcının dosyayı doğrudan düzenlemek için Not Defteri'ni kullanabileceği şekilde yapıyorum, böylece bu karakterlerin kendilerini nereye yerleştirebileceğini bilmiyor - dizenin başında veya sonunda olabilir. Yani hepsini kaldırmak bunu yapıyor.

Diğer girişlerin hepsi çalışır, ancak Kaldır en kolayı olabilir mi?

Bu gönderiden Regex hakkında biraz daha fazla şey öğrendim - burada kullanımı ile oldukça güzel bir çalışma.


Yapabileceğin gibi görünüyorfilter = filter.Remove('\n').Remove('\r');
John Saunders

2

Çok fazla silme seviyesi kullanıyorum

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

ve şimdi temiz bir satırımız var



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.