2017-09-22 22 views
6

lập trình viên thân mến,Làm thế nào để loại bỏ tất cả các ký tự khoảng trắng từ một String?

tôi mã hóa một cái gì đó trong C# Visual Studio 2013 và Tôi vừa nhận ra tôi có thể không cần phải sử dụng Trim() khi tôi làm Replace(" ", string.Empty).

Một ví dụ sau:

SanitizedString = RawString 
    .Replace("/", string.Empty) 
    .Replace("\\", string.Empty) 
    .Replace(" ", string.Empty) 
    .Trim(); 

Như tôi trước đó đã mã này có cấu trúc khác nhau, tôi đã không nhận thấy điều đó:

SanitizedString = RawString.Trim() 
    .Replace("/", string.Empty) 
    .Replace("\\", string.Empty) 
    .Replace(" ", string.Empty); 

Tôi biết những phương pháp làm việc khác nhau, như Trim() loại bỏ tất cả khoảng trắng ký tự, trong khi Replace(" ", string.Empty) chỉ xóa các ký tự khoảng trắng.

Đó là lý do tại sao tôi có một câu hỏi khác.

Tôi không thấy bất kỳ cách rõ ràng nào để đạt được điều đó với Thay thế. Câu hỏi của tôi là làm thế nào tôi sẽ đi về nó khi tôi muốn loại bỏ tất cả các ký tự khoảng trắng từ chuỗi?

tôi thấy như sau:

Efficient way to remove ALL whitespace from String?

Nhưng như tôi đã không bao giờ sử dụng biểu thức thông thường, tôi ngần ngại về cách áp dụng nó vào chuỗi?

+2

'SanitizedString = Regex.Replace (Raw ...., @ "\ s +", string.Empty); ' –

+0

Tất cả các khoảng trắng - ngay cả ở giữa? – doctorlove

Trả lời

10

Hãy thử sử dụng LINQ để lọc ra các không gian trắng:

using System.Linq; 

    ... 

    string source = "abc \t def\r\n789"; 
    string result = string.Concat(source.Where(c => !char.IsWhiteSpace(c))); 

    Console.WriteLine(result); 

Kết quả:

abcdef789 
+0

'source.ToCharArray()' để có hiệu suất tốt hơn – Toshi

2

Câu trả lời cho câu hỏi này không phải là dễ dàng như nó có vẻ. Vấn đề là không thực sự mã thay thế, nhưng để xác định một khoảng trắng là gì.

Ví dụ: this Wikipedia article liệt kê hàng chục ký tự (mã Unicode) có thuộc tính Unicode WSpace, cộng với nhiều ký tự liên quan mà hầu hết mọi người sẽ xem là khoảng trắng, nhưng không có thuộc tính WSpace.

Cho rằng, tôi sẽ không bao giờ dựa vào những gì một số trình phân tích cú pháp regex xem xét \s, bởi vì điều này thực sự không được tiêu chuẩn hóa. Tôi khá chắc chắn rằng phân tích cú pháp regex của C# không xử lý các điểm mã như U+2001 là không gian màu trắng, vì vậy chúng sẽ không bị xóa khỏi chuỗi của bạn.

Điều này có thể hoặc không có vấn đề với đơn đăng ký của bạn; nó phụ thuộc vào cách các chuỗi bạn phải xử lý được lọc ở vị trí đầu tiên. Nhưng nếu bạn định xử lý các chuỗi bằng ngôn ngữ nước ngoài (nói cách khác: các chuỗi chứa ký tự nằm ngoài phạm vi ASCII), bạn sẽ phải suy nghĩ về nó.

Khi làm như vậy, hãy nhớ rằng regex chậm.Nếu bạn cần định nghĩa các thay thế của riêng bạn (vì những lý do nêu trên), bạn nên sử dụng hàm thay thế nhẹ hơn (nếu C# hoặc các assembly của nó cung cấp một - tôi không dùng C#, vì vậy tôi không biết).

0
string Abcd = Console.ReadLine(); 
     string wspace = ""; 
        int len = Abcd.Length; 
     for (int i = 0; i <= len-1; i++) 
     { 
      if (Abcd[i] != ' ') 
      { 
       wspace = wspace + Abcd[i]; 
      } 

     } 
     Console.WriteLine("The Sring Without Space Is= '"+wspace+"'"); 
     Console.ReadLine(); 
Các vấn đề liên quan