Xóa ký tự xuống dòng và dòng mới khỏi cuối chuỗi trong c #


Câu trả lời:


198

Điều này sẽ loại bỏ bất kỳ sự kết hợp nào giữa ký tự xuống dòng và dòng mới từ phần cuối của s:

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

Chỉnh sửa : Hoặc như JP vui lòng chỉ ra, bạn có thể đánh vần ngắn gọn hơn là:

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

10
Hãy lưu ý đến từ khóa params trong khai báo TrimEnd, nó cho phép bạn chuyển nhiều trường hợp của một ký tự thay vì mảng. msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
JP Alioto

3
Làm thế nào về điều này: s = s.TrimEnd (System.Enosystem.NewLine.ToCharArray ());
Ε Г И І И О

4
Tôi đã viết c # kể từ khi v1.0 ra mắt (10 năm trước). Bây giờ bạn cho tôi biết về TrimEnd. Doh!
s15199d

7
Chỉ cần quan tâm, tất cả những gì bạn thực sự cần là s = s.TrimEnd()- như tài liệu nói: Nếu trimChars là null hoặc một mảng trống, các ký tự khoảng trắng Unicode sẽ bị xóa thay thế. - xem String.TrimEnd
Stuart Wood vào

@StuartWood: ... đó không phải là những gì Avik yêu cầu. Ông yêu cầu cụ thể '\r''\n'và không có gì khác, không phải là nhân vật không gian ' 'ví dụ.
RichieHindle

31

Điều này sẽ hoạt động ...

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

19

Nếu bạn đang sử dụng nhiều nền tảng, bạn sẽ an toàn hơn khi sử dụng phương pháp này.

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

Nó sẽ tính đến các ký tự xuống dòng và ký tự xuống dòng khác nhau.


Phương pháp của JP - tst.TrimEnd( '\r', '\n' )- là hợp lý "an toàn" trong thực tế vì các EOL chính [hiện tại] chỉ là các tổ hợp khác nhau của \r\n, nhưng alexw là câu trả lời "đúng". Hãy để CLR cho bạn biết các ký tự trong dòng mới của nền tảng này. EOL không phải lúc nào cũng là sự kết hợp của 0D và 0A
ruffin

Tôi đã từng sử dụng Environment.NewLinenhưng nó dường như không xử lý được các trường hợp có \rmặt mà không có \n. TrimEnd('r','\n')có vẻ đáng tin cậy hơn trong trường hợp này.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

2
Có thể đây thực sự là một vấn đề đa nền tảng và dec cần phải loại bỏ cụ thể cả hai \ r \ n, bất kể môi trường hệ thống nói gì.
Andrew Hill

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

slà chuỗi gốc. (Ghi chú viết hoa)


11
Điều đó cũng sẽ: 1) Xóa \ r \ n khỏi giữa chuỗi, 2) Xóa bất kỳ ký tự khoảng trắng nào khỏi đầu chuỗi và 3) xóa mọi ký tự khoảng trắng khỏi cuối chuỗi.
RichieHindle

Đúng, tôi chỉ giả định một / r / n ở cuối. Nó không được đề cập trong bài đăng ban đầu. Tôi không chắc điều đó gây ra -1 phiếu bầu
Crash893

Chính xác những gì tôi đang tìm kiếm. Cảm ơn.
NotMe,

4
Sử dụng replace()sau đó trim()không quá mức cần thiết khi TrimEnd()có thể thực hiện công việc một mình, hay tôi đang thiếu thứ gì đó?
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

đề xuất tuyệt vời @MattBaker
Crash893

8
s.TrimEnd();

Trên đây là tất cả những gì tôi cần để xóa '\ r \ n' khỏi cuối chuỗi của mình.

Câu trả lời được ủng hộ dường như sai đối với tôi. Thứ nhất, nó không làm việc khi tôi cố gắng, thứ hai, nếu nó đã làm công việc tôi hy vọng rằng s.TrimEnd ( '\ r', '\ n') sẽ chỉ loại bỏ một trong hai một '\ r' hoặc '\ n' , vì vậy tôi sẽ phải chạy nó trên chuỗi của mình hai lần - một lần cho khi '\ n' ở cuối và lần thứ hai khi '\ r' ở cuối (bây giờ '\ n' đã bị xóa) .


4

Nếu luôn có một CRLF duy nhất, thì:

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

Nếu nó có thể có hoặc không, thì:

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

Cả hai điều này (theo thiết kế), sẽ loại bỏ tối đa một CRLF duy nhất. Lưu vào bộ nhớ cache của regex để có hiệu suất.


4

Đối với chúng tôi 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

Điều này quá dễ dàng - đối với tôi, tôi đang lọc ra một số mục email. Tôi đang viết bộ lọc rác email tùy chỉnh của riêng mình. Với \ r và / hoặc \ n trong chuỗi, nó sẽ xóa tất cả các mục thay vì lọc.

Vì vậy, tôi vừa thực hiện filter = filter.Remove ('\ n') và filter = filter.Remove ('\ r'). Tôi đang tạo bộ lọc của mình để người dùng cuối có thể sử dụng Notepad để chỉnh sửa trực tiếp tệp, do đó không có thông báo về nơi các ký tự này có thể tự nhúng - có thể là ở đầu hoặc cuối chuỗi. Vì vậy, loại bỏ tất cả chúng làm điều đó.

Các mục nhập khác đều hoạt động nhưng Xóa có thể là dễ nhất?

Tôi đã tìm hiểu thêm một chút về Regex từ bài đăng này - công việc khá tuyệt vời với việc sử dụng nó ở đây.


Hình như bạn có thể làm chỉ làfilter = filter.Remove('\n').Remove('\r');
John Saunders

2

Tôi sử dụng nhiều mức độ xóa

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

và bây giờ chúng ta có một hàng sạch



0

Đây là những gì tôi phải làm việc cho tôi.

s.Replace("\r","").Replace("\n","")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.