colocar todos los personajes a la derecha del último guión


114

Tengo lo siguiente:

string test = "9586-202-10072"

¿Cómo puedo -colocar todos los caracteres a la derecha de la final, de modo que 10072? El número de caracteres siempre es diferente a la derecha del último guión.

¿Cómo se puede hacer esto?

Respuestas:


237

Puedes conseguir la posición del último -con str.LastIndexOf('-'). Entonces, el siguiente paso es obvio:

var result = str.Substring(str.LastIndexOf('-') + 1);

Corrección :

Como dice Brian a continuación, usar esto en una cadena sin guiones dará como resultado que se devuelva la misma cadena.


1
Esto funciona incluso cuando el guión es el último carácter, en ese caso devuelve correctamente una cadena vacía. Esto solo fallará si stres nulo o si no contiene ningún guion. (En el caso de que no haya un guión, no se arroja; devuelve la cadena de origen completa.)
LukeH

@LukeH: Gracias por avisar. No miré y asumí erróneamente que arrojaría.
Jon

3
Bueno, LastIndexOfdevuelve -1 si no se encuentra nada (este es un comportamiento documentado, por lo que es seguro confiar en él). str.Substring(1-1)te da una cadena igual a str. Sin sorpresas, aquí.
Brian

2
@Brian: Creo que rompí mi récord de errores en la misma declaración trivial. Lección: nunca escriba nada sin revisar el código después del hecho. Gracias.
Jon

57

Puede usar LINQ y ahorrarse el análisis explícito:

string test = "9586-202-10072";
string lastFragment = test.Split('-').Last();

Console.WriteLine(lastFragment);

5
Esto probablemente ahorrará más tiempo al desarrollador, pero en el caso general, tenga en cuenta que un código como este tendrá muchas asignaciones de cadenas (probablemente cuatro en el ejemplo anterior), por lo que podría quitarse el énfasis en las secciones de rendimiento crítico.
Charles Burns

5
string tail = test.Substring(test.LastIndexOf('-') + 1);

4
YourString.Substring(YourString.LastIndexOf("-"));

4
si excluye "+ 1" al final, la salida contendrá un carácter especial junto con la cadena.
Meena

3

Puedo ver que esta publicación fue vista más de 46,000 veces. Apuesto a que muchos de los 46.000 espectadores están haciendo esta pregunta simplemente porque solo quieren el nombre del archivo ... y estas respuestas pueden ser un agujero de conejo si no puede hacer su subcadena textualmente usando el signo arroba.

Si simplemente desea obtener el nombre del archivo, entonces hay una respuesta simple que debe mencionarse aquí. Incluso si no es la respuesta precisa a la pregunta.

result = Path.GetFileName(fileName);

ver https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx




1
string atest = "9586-202-10072";
int indexOfHyphen = atest.LastIndexOf("-");

if (indexOfHyphen >= 0)
{
    string contentAfterLastHyphen = atest.Substring(indexOfHyphen + 1);
    Console.WriteLine(contentAfterLastHyphen );
}

0

Creé una extensión de cadena para esto, espero que ayude.

public static string GetStringAfterChar(this string value, char substring)
    {
        if (!string.IsNullOrWhiteSpace(value))
        {
            var index = value.LastIndexOf(substring);
            return index > 0 ? value.Substring(index + 1) : value;
        }

        return string.Empty;
    }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.