2012-04-09 49 views
10

thể trùng lặp:
How do I replace multiple spaces with a single space in C#?Làm thế nào để cắt "a b c" thành "a b c"

cách thanh lịch nhất làm thế nào để cắt khoảng trắng trong chuỗi như " a<many spaces>b c " vào "a b c" là gì. Vì vậy, khoảng trắng lặp lại được thu nhỏ thành một không gian.

+0

@naveen, câu hỏi bạn liên kết đến không xử lý không gian xung quanh chuỗi. – Lucero

+4

@Lucero: luôn có '.Trim()' cho điều đó. :) – naveen

+1

@naveen, vấn đề là nó khác. Nếu ai biết cách sử dụng regex và trim, thì câu hỏi thậm chí sẽ không cần thiết. – Lucero

Trả lời

12

Bạn có thể sử dụng Regex cho việc này:

Regex.Replace(my_string, @"\s+", " ").Trim(); 
+0

-1: Sẽ không loại bỏ khoảng trống xung quanh chuỗi. – leppie

+2

Ok, vậy tại sao bạn cho -1 câu trả lời là ok ... nó có thể được sửa chữa một cách dễ dàng ... không có điểm nào –

+1

@TomaCristian: Bởi vì đã có một vài câu trả lời đúng khác. Ngớ ngẩn như thế nào mọi người đi và chỉnh sửa của họ ... IMO khá lame. Chỉ cần xóa nó nếu bạn đã sai nó lần đầu tiên. – leppie

14

Một giải pháp w/o regex, chỉ để có nó trên bảng:

char[] delimiters = new char[] { ' '}; // or null for 'all whitespace' 
string[] parts = txt.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); 
string result = String.Join(" ", parts); 
+1

Không giống như các giải pháp regex sử dụng '\ s', điều này sẽ chỉ xóa các ký tự khoảng trắng (U + 0020), không phải các ký tự khác được phân loại là khoảng trắng. Điều này đáp ứng các tiêu chí của Q nhưng trong thực tế tôi mong đợi bất kỳ nhu cầu như vậy cũng áp dụng cho các tab, vv – Richard

+1

@Richard: OP có thể tinh chỉnh điều đó với các dấu phân cách var. Và bằng cách sử dụng 'delimiters = null' tương ứng với' \ s' –

+1

Tôi luôn tự hỏi (như trong câu hỏi này ở đây) tại sao các hoạt động chuỗi phức tạp, đắt tiền lại được ưa thích bởi nhiều biểu thức chính quy. Phương châm của tôi là sử dụng các công cụ phù hợp cho công việc cần làm và regex là công cụ được thiết kế chính xác cho sự khớp mẫu "đơn giản" của các biểu thức chính quy văn bản.(Henk, đừng hiểu lầm tôi, tôi không chỉ trích câu trả lời của bạn chút nào, nhưng tôi không hiểu sự nghịch đảo của nhiều người học regex và sử dụng chúng ở đâu "họ ở nhà" - lưu ý rằng tôi ' d không tạo trình phân tích cú pháp đầy đủ hoặc trình xác thực số với các regex, chúng có giới hạn rõ ràng của chúng.) – Lucero

0
Regex.Replace(str, "[\s]+"," ") 

Sau đó gọi Trim để thoát khỏi không gian trắng hàng đầu và đuôi.

8
Regex.Replace(my_string, @"^\s+|\s+$|(\s)\s+", "$1"); 
+4

+1 Tôi thích nó. Nhưng tôi tự hỏi có bao nhiêu lập trình viên của tôi sẽ hiểu nó. :) – naveen

+1

Biết một số vấn đề cơ bản về regex là một kỹ năng quan trọng IMHO, đặc biệt vì nó cũng nằm trong bộ công cụ của nhà phát triển web phía máy khách (nơi mà nhiều đàn em sẽ làm việc). Vì vậy, nếu họ không hiểu nó, họ chỉ cần tìm kiếm nó ... nó không quá phức tạp để được phân tích bởi một người mới regex IMHO. – Lucero

+0

Chắc chắn, nó có thể được tìm ra, nhưng phải mất một thời gian để phân tích tinh thần, ngay cả với kiến ​​thức regex. Regex trong phiên bản có '.Trim()' ngắn gọn hơn nhiều, dễ bảo trì hơn. (Tôi không downvoting, mặc dù - phiên bản này _may_ được ưa thích trong một số tình huống, giống như một vòng lặp chặt chẽ, nếu nó thực sự là nhanh hơn) – Izkata

0

sử dụng regex

String test = " a b c "; 
test = Regex.Replace(test,@"\s{2,}"," "); 
test = test.Trim(); 

mã này thay thế bất kỳ thứ 2 trở lên không gian với một không gian sử dụng Regex sau đó loại bỏ ngay từ đầu và kết thúc.

+0

Regex của bạn thực sự chỉ thay thế chính xác hai khoảng trắng bằng một. Nó phải là '\ s {2,}' hoặc '\ s \ s +' hoặc thậm chí '\ s +' nếu bạn muốn thay thế bất kỳ khoảng trống nào bằng dấu cách (lưu ý rằng vì '\ s' không khớp với tất cả khoảng trắng bao gồm ký tự chẳng hạn như các tab kết quả sẽ khác nhau). – Lucero

+0

@Lucero bạn nói đúng nhưng nó sẽ hoạt động vì nó sẽ chọn mỗi 2 khoảng trống là một nhóm vì vậy nếu chúng ta có 4 khoảng trắng, nghĩa là chúng ta phải nhóm lại –

+0

Sửa lỗi hiện đang hoạt động, nhưng trước khi 2 nhóm thay thế cho hai khoảng trống trong đầu ra (đầu ra không được xử lý lại như đầu vào). – Lucero

4

Sử dụng phương pháp Trim để loại bỏ khoảng trắng từ đầu và cuối của chuỗi, và một biểu thức chính quy để giảm nhiều không gian:

s = Regex.Replace(s.Trim(), @"\s{2,}", " "); 
0

Sử dụng một biểu thức chính quy:

"(){2,}" //Matches any sequence of spaces, with at least 2 of them 

và sử dụng nó để thay thế tất cả các kết quả khớp với "".

Tôi đã không thực hiện nó trong C# và tôi cần thêm thời gian để tìm ra tài liệu nói gì, vì vậy bạn sẽ phải tự mình tìm thấy .. xin lỗi.

0
 Regex rgx = new Regex("\\s+"); 
     string str; 
     str=Console.ReadLine(); 
     str=rgx.Replace(str," "); 
     str = str.Trim(); 
     Console.WriteLine(str); 
Các vấn đề liên quan