2010-04-18 16 views
95

Me siento un poco tonto publicando esto cuando parece algo simple y hay toneladas de preguntas sobre cadenas/caracteres/expresiones regulares, pero no pude encontrar todo lo que necesitaba (excepto en otro idioma: Remove All Text After Certain Point).¿Quitar caracteres después del carácter específico en la secuencia, luego quitar la subcadena?

Tengo el siguiente código:

[Test] 
    public void stringManipulation() 
    { 
     String filename = "testpage.aspx"; 
     String currentFullUrl = "http://localhost:2000/somefolder/myrep/test.aspx?q=qvalue"; 
     String fullUrlWithoutQueryString = currentFullUrl.Replace("?.*", ""); 
     String urlWithoutPageName = fullUrlWithoutQueryString.Remove(fullUrlWithoutQueryString.Length - filename.Length); 

     String expected = "http://localhost:2000/somefolder/myrep/"; 
     String actual = urlWithoutPageName; 
     Assert.AreEqual(expected, actual); 
    } 

Probé la solución en la pregunta anterior (esperando la sintaxis sería lo mismo!) Pero pues no. Quiero eliminar primero queryString, que podría ser de cualquier longitud variable, y luego eliminar el nombre de la página, que de nuevo podría tener cualquier longitud.

¿Cómo puedo obtener la eliminación de la cadena de consulta de la URL completa para que pase esta prueba? ?

Respuesta

176

Para la manipulación de cadenas, si lo que desea es matar todo después de la, usted puede hacer esto

string input = "http://www.somesite.com/somepage.aspx?whatever"; 
int index = input.IndexOf("?"); 
if (index > 0) 
    input = input.Substring(0, index); 

Editar: Si todo después de la última barra, hacer algo como

string input = "http://www.somesite.com/somepage.aspx?whatever"; 
int index = input.LastIndexOf("/"); 
if (index > 0) 
    input = input.Substring(0, index); // or index + 1 to keep slash 

Alternativamente , ya que está trabajando con una URL, puede hacer algo con ella como este código

System.Uri uri = new Uri("http://www.somesite.com/what/test.aspx?hello=1"); 
string fixedUri = uri.AbsoluteUri.Replace(uri.Query, string.Empty); 
+1

o sería el último '/'? –

+1

Oh, sí, vuelve a leer eso. Él puede hacer LastIndexOf ("/") en ese caso. –

+0

¡Gracias x2 por proporcionar dos formas de hacerlo! – SventoryMang

6

La clase Uri es generalmente la mejor opción para manipular Urls.

+4

Un ejemplo de enlace sería agradable. – Trevor

0

I second Hightechrider: hay una clase Url especializada ya creada para ti.

Debo señalar, sin embargo, que PHP's replaceAll usa expresiones regulares para el patrón de búsqueda, lo que también se puede hacer en .NET: mire la clase RegEx.

0

puede usar el método .NET incorporado para eliminar el QueryString. es decir, Request.QueryString.Remove["whatever"];

aquí lo en el nombre [] es de la querystring que desea quitar .

Probar esto ... Espero que esto ayude.

0

Para eliminar todo antes de un carácter específico, utilice a continuación.

string1 = string1.Substring(string1.IndexOf('$') + 1); 

Lo que hace es, toma todo antes del $ char y lo elimina. Ahora, si quieres eliminar los elementos después de un personaje, simplemente cambia el +1 a un -1 y ¡estás listo!

Pero para una URL, usaría la clase incorporada .NET para tomar eso.

60

Para eliminar todo antes de la primera "/"

input = input.Substring(input.IndexOf("/")); 

Para eliminar todo después de la primera "/"

input = input.Substring(0, input.IndexOf("/")+1); 

Para eliminar todo antes de la última "/"

input = input.Substring(input.LastIndexOf("/")); 

Para eliminar todo después del último "/"

input = input.Substring(0, input.LastIndexOf("/")+1); 

Aún más opción más simple para eliminar caracteres después del carácter específico es utilizar el método string.Remove() de la siguiente manera:

Para eliminar todo después de la primera "/"

input = input.Remove(input.IndexOf("/")+1); 

Para eliminar todo después de la última "/"

input = input.Remove(input.LastIndexOf("/")+1); 
+4

Tenga en cuenta que todos arrojarán un ejemplo si la cadena no contiene un "/" en absoluto. Obviamente, esto no será un problema si está trabajando con cadenas codificadas como en la pregunta original, pero en la mayoría de los casos, tendrá que tener eso en cuenta. – Elezar

+2

Excelentes ejemplos, especialmente mostrando los 4 casos. – poiasd

1

Request.QueryString le ayuda a conseguir los parameters y valores incluidos dentro de la URL

ejemplo

string http = "http://dave.com/customers.aspx?customername=dave" 
string customername = Request.QueryString["customername"].ToString(); 

por lo que la variable de CustomerName debe ser igual a Dave

respecto

Cuestiones relacionadas