2010-12-26 50 views
9

cho bất kỳ chuỗi nào, tôi muốn xóa mọi chữ cái sau một ký tự cụ thể.cách xóa tất cả văn bản sau lần lặp lại cuối cùng của một ký tự nhất định

ký tự này có thể tồn tại nhiều lần trong chuỗi và tôi chỉ muốn áp dụng điều này cho lần xuất hiện cuối cùng.

nên cho phép nói "/" là nhân vật, sau đây là một số ví dụ:

http://www.ibm.com/test ==>http://www.ibm.com
hello/kiểm tra ==> hello

Trả lời

28
if (text.Contains('/')) 
    text = text.Substring(0, text.LastIndexOf('/')); 

hoặc

var pos = text.LastIndexOf('/'); 
if (pos >= 0) 
    text = text.Substring(0, pos); 

(được chỉnh sửa để bao gồm trường hợp khi '/' không tồn tại trong chuỗi, như được đề cập trong các nhận xét)

+4

... giả sử rằng '/' tồn tại trong chuỗi. Nếu không, bạn nhận được một 'ArgumentOutOfRangeException'. –

+1

Để thực hiện, bạn có thể chạy LastIndexOf và kiểm tra xem kết quả là -1 để kiểm tra xem chuỗi có chứa ký tự hay không. Bằng cách này bạn chỉ tìm kiếm thông qua các chuỗi, thay vì hai lần (Chứa + LastIndexOf) có thể tốn kém cho các chuỗi lớn. –

+0

Điểm tốt. Đã chỉnh sửa. –

1

tùy chọn khác là sử dụng String.Remove

modifiedText = text.Remove(text.LastIndexOf(separator)); 

Với một số lỗi kiểm tra mã có thể được chiết xuất một phương pháp khuyến nông như:

public static class StringExtensions 
{ 
    public static string RemoveTextAfterLastChar(this string text, char c) 
    { 
     int lastIndexOfSeparator; 

     if (!String.IsNullOrEmpty(text) && 
      ((lastIndexOfSeparator = text.LastIndexOf(c)) > -1)) 
     { 

      return text.Remove(lastIndexOfSeparator); 
     } 
     else 
     { 
      return text; 
     } 
    } 
} 

Nó có thể được sử dụng như:

private static void Main(string[] args) 
{ 
    List<string> inputValues = new List<string> 
    { 
     @"http://www.ibm.com/test", 
     "hello/test", 
     "//", 
     "SomethingElseWithoutDelimiter", 
     null, 
     "  ", //spaces 
    }; 

    foreach (var str in inputValues) 
    { 
     Console.WriteLine("\"{0}\" ==> \"{1}\"", str, str.RemoveTextAfterLastChar('/')); 
    } 
} 

Đầu ra:

"http://www.ibm.com/test" ==> "http://www.ibm.com" 
"hello/test" ==> "hello" 
"//" ==> "/" 
"SomethingElseWithoutDelimiter" ==> "SomethingElseWithoutDelimiter" 
"" ==> "" 
"  " ==> "  " 
Các vấn đề liên quan