2010-12-26 2 views
9

, учитывая любую строку, я хочу удалить любые буквы после определенного символа.как удалить весь текст после последнего повторения определенного символа

Этот символ может существовать несколько раз в строке, и я хочу применить это только к последнему событию.

так что позволяет сказать, "/" является персонаж, вот несколько примеров:

http://www.ibm.com/test ==>http://www.ibm.com
привет/Тест ==> привет

ответ

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

или

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

(отредактировано, чтобы охватить случай, когда '/' не существует в строке, как указано в комментариях)

+4

... предполагая, что '/' существует в строке. В противном случае вы получите «ArgumentOutOfRangeException». –

+1

Для производительности вы можете запустить LastIndexOf и проверить, равен ли результат -1, чтобы проверить, содержит ли строка символ. Таким образом, вы просматриваете только строки, а не дважды (Contains + LastIndexOf), что может быть дорогостоящим для больших строк. –

+0

Хорошая точка. Ред. –

1

Другие варианты заключается в использовании String.Remove

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

С некоторыми проверки ошибок код может быть извлечен метод расширения как:

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; 
     } 
    } 
} 

Он может быть использован как:

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('/')); 
    } 
} 

Выход:

"http://www.ibm.com/test" ==> "http://www.ibm.com" 
"hello/test" ==> "hello" 
"//" ==> "/" 
"SomethingElseWithoutDelimiter" ==> "SomethingElseWithoutDelimiter" 
"" ==> "" 
"  " ==> "  " 
Смежные вопросы