2010-07-15 15 views
23

Lo que tengo es un archivo de texto gigante que contiene un conjunto de cadenas divididas por \. El problema para mí es que puede haber 5 \ o 4 \ o 3 \.División de cadena por el último separador

Lo que necesito para extraer el último \ no importa cuántos de ellos haya. Cualquier ayuda es apreciada.

Ejemplos:

 
I\need\this 
I\want\line\this 
Hello\give\me\all\this 

que necesitan la palabra this por ejemplo, pero es obvio que no es sólo la palabra this.

+0

Dada una cadena sin un "\", si la función de devolución de la totalidad de la cuerda o una cadena vacía ? p.ej. Pasarlo "Hola", ¿debería devolver "Hola" o ""? –

Respuesta

53
string last = inputString.Substring(inputString.LastIndexOf('\\') + 1); 
+0

+1: con la advertencia que comprueba si hay una cadena vacía primero 'if (! string.IsNullOrEmpty (inputString))', y si no hay "\" en la cadena, quiere que toda la cadena :) –

+11

La comprobación nula es correcta, siempre debería verificar eso. Lo bueno de LastIndexOf (..) + 1, es que LastIndexOf (..) devolverá -1 para un personaje que no se pudo encontrar, por lo que el resultado neto es que la subcadena se toma desde la posición 0, que es el inicio de la cuerda, por lo que se devuelve toda la cuerda. –

+1

De acuerdo, en todos los puntos, pero el requisito puede ser que si no hay "\" que se devuelva una cadena vacía. Solo digo que uno debe verificar cuál es el comportamiento requerido. –

18
string myString = inputString.Split('\\').Last(); 
+5

.NET Regla 34 - Si existe, hay LINQ para ello. :-) –

+1

Quizás debería ser 'LastOrDefault()' para mayor seguridad –

+1

¿De verdad? Hubiera pensado que el peor escenario posible (inputstring == string.Empty), 'inputString.Split ('\\')' todavía devolvería una matriz de una cadena, que por supuesto == string.Empty – Flynn1179

6

casi se olvidó de este (aunque es un poco descarado):

string result = Path.GetFilename(input);

+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. – lxg

+1

Ha sido marcado debido a la baja calidad. Y de hecho, solo funciona en Windows. (Me doy cuenta de que la pregunta es sobre C#, que generalmente se usa en entornos Windows, pero puede ser portado a otras plataformas a través de Mono). – lxg

+3

Aceptaré que el hecho de que solo funciona en Windows es probablemente relevante, pero eso no es realmente un argumento justificable para afirmar que es de baja calidad. MÁS respuestas no funcionarán en algunas circunstancias. De hecho, el OP no explicó por qué quiere hacer esto, era completamente posible que extraer un nombre de archivo era exactamente lo que quería hacer, sin duda podría ser ideal para otro lector que está buscando una respuesta por este motivo. – Flynn1179

Cuestiones relacionadas