2011-08-31 11 views
49

tengo este código:Seleccionar último elemento rápidamente después de un .split()

stringCutted = myString.Split("/"). // ??? 

y me gustaría almacenar en stringCutted el último elemento de la string[] después de la división, directamente, de forma rápida, sin almacenar la matriz dividida en una variable y el acceso a ese elemento con array[array.length].

¿Es esto posible en C#?

+1

string 'Cutted' ?????? –

+0

una cadena que ha sido cortada :) – markzzz

+1

No, soy italiano :) – markzzz

Respuesta

95

Si está utilizando .NET 3.5 o superior, es fácil usando LINQ to Objects:

stringCutted = myString.Split('/').Last(); 

Nota que Last() (sin un predicado) está optimizado para el caso en que la fuente implementa IList<T> (como una matriz unidimensional hace) por lo que este no iterar sobre toda la matriz para encontrar el último elemento. Por otra parte, que la optimización es indocumentado ...

+4

Sí, eso es debido a LINQ, necesita agregar un 'using System.Linq;' a tu código – Rumplin

+1

Esto funciona, pero nunca. De hecho, 'Split ("/")' me puso un error. 'Split ('/')' funciona ... – markzzz

+0

@markzzz: Solucionado. Asumía que publicabas código de trabajo para empezar (tu pregunta usa comillas dobles). –

22
stringCutted=myString.Split("/").Last() 

Pero, lo digo, si usted está tratando de obtener un nombre de archivo de una ruta, esta montones funciona mejor:

var fileName=System.IO.Path.GetFileName("C:\\some\path\and\filename.txt"); 
// yields: filename.txt 
3

uso de LINQ

"t/e/s/t".Split("/").Last(); 
11

Puesto que desea una solución que devuelve el último elemento directamente, de forma rápida, sin tienda de la matriz Splitted, creo que esto puede ser útil:

stringCutted = myString.Substring(myString.LastIndexOf("/")+1); 
1

Para utilizar este código, me salto último elemento desde el enlace Url.

string url = Request.Url.ToString().Substring(0, Request.Url.ToString().LastIndexOf('/')); 
Cuestiones relacionadas