2010-08-02 21 views
43

Teniendo en cuenta esta cadena:¿Cómo obtener la última parte de una cadena?

http://s.opencalais.com/1/pred/BusinessRelationType 

quiero conseguir la última parte de ella: "BusinessRelationType"

He estado pensando en revertir toda la cadena a continuación, en busca de la primera "/", tomar todo a la izquierda de eso e invertir eso. Sin embargo, espero que haya un método mejor/más conciso. ¿Pensamientos?

Gracias, Paul

Respuesta

98

de una sola línea con LINQ:

string lastPart = text.Split('/').Last(); 
37

Usted puede utilizar String.LastIndexOf.

int position = s.LastIndexOf('/'); 
if (position > -1) 
    s = s.Substring(position + 1); 

Otra opción es utilizar un Uri, si eso es lo que necesita. Esto tiene una ventaja de analizar otras partes de la URI, y hacer frente así a la cadena de consulta, por ejemplo: BusinessRelationType?q=hello world

Uri uri = new Uri(s); 
string leaf = uri.Segments.Last(); 
14

Puede utilizar string.LastIndexOf para encontrar el último/y luego Substring para conseguir todo después de que:

int index = text.LastIndexOf('/'); 
string rhs = text.Substring(index + 1); 

Tenga en cuenta que como LastIndexOf devuelve -1 si no se encuentra el valor, esta la segunda línea devolverá toda la cadena si no hay/en el texto.

3
if (!string.IsNullOrEmpty(url)) 
    return url.Substring(url.LastIndexOf('/') + 1); 
return null; 
9

Esta es una manera muy concisa para hacer esto:

str.Substring(str.LastIndexOf("/")+1); 
1

Alternativamente, puede utilizar expresiones regulares /([^/]*?)$ para encontrar pareja

+0

La pereza no funciona de manera arbitraria, pero de todos modos no la necesita. '[^ /] * $' funcionará. – Kobi

33

Cuando me encuentro escribiendo código como LastIndexOf("/"), tengo la sensación de Probablemente estoy haciendo algo que no es seguro, y es probable que haya un mejor método disponible.

Como está trabajando con un URI, recomendaría utilizar la clase System.Uri. Esto le proporciona validación y acceso seguro y fácil a cualquier parte del URI.

Uri uri = new Uri("http://s.opencalais.com/1/pred/BusinessRelationType"); 
string lastSegment = uri.Segments.Last(); 
2

Un pequeño consejo para cualquier gente tonta o no observantes (o cualquier persona que ha dado recientemente el café y es una tontería, distraído, mal humor ... como yo) - rutas de archivos de Windows utilizan un '\' ... todos los ejemplos aquí, por otro lado, usan un '/'.

¡Utilice un '\\' para obtener el final de una ruta de archivo de Windows! :)

Las soluciones aquí son perfectas y completas, pero quizás esto podría evitar que otra alma pobre pierda una hora como yo lo hice.

+2

Usar @ "\ path \ to \ something" es una forma más limpia en mi opinión :) – AntoineLev

0
Path.GetFileName 

considera/y \ como separadores.

Path.GetFileName ("http://s.opencalais.com/1/pred/BusinessRelationType") = 
"BusinessRelationType" 
Cuestiones relacionadas