2010-12-26 14 views

Respuesta

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

o

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

(editado para cubrir el caso cuando '/' no existe en la cadena, como se menciona en los comentarios)

+4

... suponiendo que '/' existe en la cadena. De lo contrario, obtienes una 'ArgumentOutOfRangeException'. –

+1

Para el rendimiento, puede ejecutar LastIndexOf y verificar si el resultado es -1 para verificar si string contiene el caracter. De esta forma, solo busca a través de las cadenas, en lugar de dos (contiene + LastIndexOf), lo que puede ser costoso para cadenas grandes. –

+0

Buen punto. Editado –

1

Otra de las opciones es usar String.Remove

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

Con un poco de comprobación de errores en el código se puede extraer a un método de extensión como:

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

Podría ser utilizado como:

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

Salida:

"http://www.ibm.com/test" ==> "http://www.ibm.com" 
"hello/test" ==> "hello" 
"//" ==> "/" 
"SomethingElseWithoutDelimiter" ==> "SomethingElseWithoutDelimiter" 
"" ==> "" 
"  " ==> "  " 
Cuestiones relacionadas