Câu trả lời:
Tôi thích sử dụng các biểu thức thông thường. Trong trường hợp này bạn có thể làm:
string replacement = Regex.Replace(s, @"\t|\n|\r", "");
Các biểu thức chính quy không phổ biến trong thế giới .NET như trong các ngôn ngữ động, nhưng chúng cung cấp rất nhiều sức mạnh để thao tác các chuỗi.
Bạn muốn sử dụng String.Replace
để loại bỏ một nhân vật.
s = s.Replace("\n", String.Empty);
s = s.Replace("\r", String.Empty);
s = s.Replace("\t", String.Empty);
Lưu ý rằng String.Trim(params char[] trimChars)
chỉ loại bỏ các ký tự đầu và cuối trong trimChars
ví dụ được gọi trên.
Bạn có thể tạo một phương thức mở rộng để tránh các vấn đề về hiệu năng của việc tạo ra nhiều chuỗi tạm thời ở trên:
static string RemoveChars(this string s, params char[] removeChars) {
Contract.Requires<ArgumentNullException>(s != null);
Contract.Requires<ArgumentNullException>(removeChars != null);
var sb = new StringBuilder(s.Length);
foreach(char c in s) {
if(!removeChars.Contains(c)) {
sb.Append(c);
}
}
return sb.ToString();
}
Tôi biết đây là một bài viết cũ, tuy nhiên tôi nghĩ tôi sẽ chia sẻ phương pháp tôi sử dụng để xóa các ký tự dòng mới.
s.Replace(Environment.NewLine, "");
Người giới thiệu:
Chuỗi MSDN. Phương thức đặt lại và Môi trường MSDN. Thuộc tính mới
Nếu tốc độ và việc sử dụng bộ nhớ thấp là quan trọng, hãy làm một cái gì đó như thế này:
var sb = new StringBuilder(s.Length);
foreach (char i in s)
if (i != '\n' && i != '\r' && i != '\t')
sb.Append(i);
s = sb.ToString();
cứ làm đi
s = s.Replace("\n", String.Empty).Replace("\t", String.Empty).Replace("\r", String.Empty);
Cách tiếp cận LINQ:
string s = "This is a Test String.\n This is a next line.\t This is a tab.\n'";
string s1 = String.Join("", s.Where(c => c != '\n' && c != '\r' && c != '\t'));
string.Join
sẽ gọi ToString
cho mỗi char
truy vấn được trả về. Tốt hơn là chỉ truyền kết quả truy vấn cho hàm string
tạo. s1 = new string(s.Where(....).ToArrary());
Sự lựa chọn đúng thực sự phụ thuộc vào mức độ lớn của chuỗi đầu vào và yêu cầu về lực lượng và bộ nhớ là gì, nhưng tôi sẽ sử dụng một biểu thức chính quy như
string result = Regex.Replace(s, @"\r\n?|\n|\t", String.Empty);
Hoặc nếu chúng ta cần áp dụng cùng một thay thế nhiều lần, tốt hơn là sử dụng phiên bản được biên dịch cho Regex như
var regex = new Regex(@"\r\n?|\n|\t", RegexOptions.Compiled);
string result = regex.Replace(s, String.Empty);
LƯU Ý: các kịch bản khác nhau yêu cầu các cách tiếp cận khác nhau để đạt được hiệu suất tốt nhất và mức tiêu thụ bộ nhớ tối thiểu
Chà ... tôi muốn bạn hiểu thêm các khu vực cụ thể của không gian. \t
thực sự là các loại như một không gian ngang, không phải là một không gian dọc. (kiểm tra chèn \t
trong Notepad)
Nếu bạn sử dụng Java, chỉ cần sử dụng \v
. Xem tài liệu tham khảo dưới đây.
\h
- Một ký tự khoảng trắng ngang:
[\t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
\v
- Một ký tự khoảng trắng dọc:
[\n\x0B\f\r\x85\u2028\u2029]
Nhưng tôi biết rằng bạn sử dụng .NET. Vì vậy, câu trả lời của tôi để thay thế mọi không gian dọc là ..
string replacement = Regex.Replace(s, @"[\n\u000B\u000C\r\u0085\u2028\u2029]", "");
Bạn có thể sử dụng Trim
nếu bạn muốn loại bỏ từ đầu và cuối.
string stringWithoutNewLine = "\n\nHello\n\n".Trim();
FYI,
Trim () làm điều đó rồi.
Mẫu LINQPad sau:
void Main()
{
var s = " \rsdsdsdsd\nsadasdasd\r\n ";
s.Length.Dump();
s.Trim().Length.Dump();
}
Đầu ra:
23
18