การลบการกลับแคร่และการขึ้นบรรทัดใหม่จากจุดสิ้นสุดของสตริงใน c #


113

ฉันจะลบอักขระส่งคืนแคร่(\r)และอักขระบรรทัดใหม่(\n)ออกจากส่วนท้ายของสตริงได้อย่างไร

คำตอบ:


198

การดำเนินการนี้จะตัดการรวมกันของการคืนค่าขนส่งและการขึ้นบรรทัดใหม่จากจุดสิ้นสุดของs:

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

แก้ไข : หรือตามที่ JP ชี้ให้เห็นคุณสามารถสะกดให้กระชับมากขึ้นว่า:

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

10
จดคีย์เวิร์ด params ในการประกาศ TrimEnd ซึ่งให้คุณส่งผ่านหลายอินสแตนซ์ของอักขระแทนอาร์เรย์ msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
JP Alioto

3
แล้วสิ่งนี้: s = s.TrimEnd (System.Environment.NewLinetoCharArray ());
ΕГИІИО

4
ฉันเขียน c # ตั้งแต่ v1.0 ออกมา (10 ปีที่แล้ว) ตอนนี้คุณบอกฉันเกี่ยวกับ TrimEnd Doh!
s15199d

7
สิ่งที่คุณต้องการจริงๆก็คือs = s.TrimEnd()- ตามที่เอกสารบอก: หาก trimChars เป็นโมฆะหรืออาร์เรย์ว่างอักขระ Unicode white-space จะถูกลบออกแทน - ดูString.TrimEnd
Stuart Wood

@StuartWood: ... ซึ่งไม่ใช่สิ่งที่เอวิคขอ เขาถามเฉพาะสำหรับ'\r'และ'\n'และไม่มีอะไรอื่นไม่อักขระช่องว่าง' 'เช่น
RichieHindle


19

หากคุณใช้หลายแพลตฟอร์มคุณจะปลอดภัยกว่าเมื่อใช้วิธีนี้

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

มันจะอธิบายถึงอักขระขึ้นบรรทัดใหม่และการกลับรถที่ต่างกัน


วิธีการของ JP - tst.TrimEnd( '\r', '\n' )- ค่อนข้าง "ปลอดภัย" ในทางปฏิบัติเนื่องจาก EOL ที่สำคัญ [ปัจจุบัน] เป็นเพียงคอมโบที่แตกต่างกันของ\rและ\nแต่ alexw เป็นคำตอบที่ "ถูกต้อง" ให้ CLR บอกคุณว่าตัวอักษรใดอยู่ในบรรทัดใหม่ของแพลตฟอร์มนี้ EOL ไม่ได้เป็นคอมโบของ 0D และ 0As เสมอไป
ruffin

ฉันเคยใช้Environment.NewLineแต่ดูเหมือนจะไม่สามารถจัดการกับอินสแตนซ์ที่\rมีอยู่\nได้ TrimEnd('r','\n')ดูเหมือนจะน่าเชื่อถือกว่าในกรณีนี้
ᴍᴀᴛᴛʙᴀᴋᴇʀ

2
อาจเป็นไปได้ว่านี่เป็นปัญหาข้ามแพลตฟอร์มและ Dec จำเป็นต้องลบทั้งสอง \ r \ n โดยเฉพาะโดยไม่คำนึงถึงสิ่งที่สภาพแวดล้อมของระบบระบุ
Andrew Hill

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

sเป็นสตริงดั้งเดิม (หมายเหตุเมืองหลวง)


11
นอกจากนี้ยังจะ: 1) ลบ \ r \ n จากตรงกลางของสตริง 2) ลบอักขระช่องว่างใด ๆ ออกจากจุดเริ่มต้นของสตริงและ 3) ลบอักขระช่องว่างใด ๆ ออกจากส่วนท้ายของสตริง
RichieHindle

จริงฉันสันนิษฐานเพียงหนึ่ง / r / n ในตอนท้าย ไม่ได้กล่าวถึงในโพสต์เดิม ฉันไม่แน่ใจว่ากำลังโหวต -1
Crash893

สิ่งที่ฉันกำลังมองหา ขอบคุณ
NotMe

4
ใช้replace()แล้วtrim()ไม่เกินความTrimEnd()สามารถเมื่อไหร่สามารถทำงานคนเดียวได้หรือฉันพลาดอะไรไป?
ᴍᴀᴛᴛʙᴀᴋᴇʀ

@MattBaker ข้อเสนอแนะที่ดี
Crash893

8
s.TrimEnd();

ข้างต้นคือทั้งหมดที่ฉันต้องใช้ในการลบ "\ r \ n" ออกจากส่วนท้ายของสตริง

คำตอบที่เพิ่มคะแนนดูเหมือนจะผิดสำหรับฉัน ประการแรกก็ไม่ได้ทำงานเมื่อฉันพยายามประการที่สองถ้ามันไม่ทำงานผมจะคาดหวังว่า s.TrimEnd ( '\ r', '\ n') เท่านั้นจะเอาทั้งแบบ '\ r' หรือ '\ n' ดังนั้นฉันจะต้องเรียกใช้มันบนสตริงของฉันสองครั้ง - หนึ่งครั้งเมื่อ '\ n' อยู่ที่จุดสิ้นสุดและครั้งที่สองเมื่อ '\ r' อยู่ที่จุดสิ้นสุด (ตอนนี้ '\ n' ถูกลบออก) .


4

หากมี CRLF เดียวเสมอ:

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

หากอาจมีหรือไม่มีให้ทำดังนี้

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

ทั้งสองอย่างนี้ (ตามการออกแบบ) จะลบ CRLF ได้มากที่สุดเพียงรายการเดียว แคช regex เพื่อประสิทธิภาพ



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') ฉันกำลังสร้างตัวกรองของฉันเพื่อให้ผู้ใช้สามารถใช้ Notepad เพื่อแก้ไขไฟล์ได้โดยตรงดังนั้นจึงไม่มีการบอกตำแหน่งที่อักขระเหล่านี้อาจฝังตัวเอง - อาจเป็นอย่างอื่นนอกเหนือจากที่จุดเริ่มต้นหรือจุดสิ้นสุดของสตริง ดังนั้นการลบทั้งหมดก็ทำได้

รายการอื่น ๆ ใช้งานได้ทั้งหมด แต่ลบอาจจะง่ายที่สุด?

ฉันได้เรียนรู้เพิ่มเติมเกี่ยวกับ Regex จากโพสต์นี้ - งานที่ยอดเยี่ยมมากเมื่อใช้ที่นี่


ดูเหมือนว่าคุณสามารถทำได้filter = filter.Remove('\n').Remove('\r');
John Saunders

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

และตอนนี้เรามีหนึ่งแถวที่สะอาด



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.