2013-04-16 32 views

Trả lời

9

Cái gì đó như sau:

string originalStr = "C:\\Test-Processed\\1-Processed\\2-Processed"; 
string temp = "-Processed"; 
string str = originalStr.Substring(0, originalStr.IndexOf(temp) + temp.Length); 
originalStr = str + originalStr.Substring(str.Length).Replace(temp, ""); 

originalStr sẽ là:

originalStr = "C:\\Test-Processed\\1\\2" 
+2

Đây là câu trả lời thú vị – Patashu

+2

+1 cho giải pháp tuyệt vời. –

1

Something như vậy:

String str = @"C:\\Test-Processed\1-Processed\2-Processed"; 
System.Console.WriteLine(new Regex("(\\d+)-Processed").Replace(str, "$1")); 

sẽ mang lại C:\\Test-Processed\1\2. Cụm từ thông dụng giả định rằng các phần tử bạn muốn xóa luôn đi trước bởi một hoặc nhiều chữ số. Nó sẽ đặt những chữ số đó trong một nhóm chụp và thay thế chuỗi con (ví dụ 1-xử lý) chỉ với chữ số (1).

EDIT: Nếu giả định không thành công, bạn có thể muốn tiếp cận @Patashu được đề xuất.

4

Thông tin chi tiết quan trọng ở đây là sự tồn tại của một indexOf bắt đầu tìm kiếm chuỗi tại một điểm nhất định trong chuỗi, thay vì từ đầu. Tại đây: http://msdn.microsoft.com/en-us/library/7cct0x33.aspx

Trước hết, bạn muốn sử dụng .indexOf("-Processed") để tìm chỉ mục đầu tiên của -Processed trong chuỗi. Nhớ chỉ mục này.

Bây giờ, hãy sử dụng .indexOf("-Processed", index+1) để tìm chỉ mục tiếp theo là -Processed không phải là giá trị đầu tiên.

Lặp lại điều đó và Substring(nextindex, "-Processed".Length) để xóa các trường hợp bổ sung này cho đến khi bạn không tìm thấy thêm.

1
string ReplaceExceptFirst(string text, string search, string replace) 
{ 
    int pos = text.IndexOf(search); 
    if (pos < 0) 
    { 
     return text; 
    } 

    int strlen = pos + search.Length; 
    return text.Substring(0, strlen) + (text.Substring(strlen)).Replace(search,replace); 
} 
0

Đây là một trong những giải pháp đưa ra ở trên. (Giải pháp của Habib và đặt tên tham số bởi Pintu Paul). Tôi đã sử dụng nó nhưng sau đó xác định chức năng như là một chuỗi mở rộng.


public static class StringExtensions 
{ 
    public static string ReplaceAllButFirst(this string originalStr, string search, string replace) 
    { 
     string str = originalStr.Substring(0, originalStr.IndexOf(search, System.StringComparison.InvariantCultureIgnoreCase) + search.Length); 
     return str + originalStr.Substring(str.Length).Replace(search, replace); 
    } 
} 
Các vấn đề liên quan