¿Eliminar caracteres después de un carácter específico en la cadena y luego eliminar la subcadena?

140

Me siento un poco tonto al publicar esto cuando esto parece un poco simple y hay toneladas de preguntas sobre cadenas / caracteres / expresiones regulares, pero no pude encontrar lo que necesitaba (excepto en otro idioma: Eliminar todo el texto después de cierto punto ).

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);
    }

Intenté la solución en la pregunta anterior (¡esperando que la sintaxis sea la misma!) Pero no. Primero quiero eliminar queryString, que podría tener cualquier longitud variable, luego eliminar el nombre de la página, que nuevamente podría tener cualquier longitud.

¿Cómo puedo eliminar la cadena de consulta de la URL completa de modo que pase esta prueba?

SventoryMang
fuente

Respuestas:

264

Para la manipulación de cadenas, si solo quieres matar todo después del?, Puedes 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, haz 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, como 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);
Anthony Pegram
fuente
1
¿O sería el último /?
Charlie Sales
44
Oh, sí, vuelve a leer eso. Él puede hacer LastIndexOf ("/") en ese caso.
Anthony Pegram
1
¡Gracias x2 por proporcionar dos formas de hacer esto!
SventoryMang
1
@gsvirdi, en ese caso, puede cargar esa URL Uri uriy luego acceder uri.Segments. Eso devolverá una matriz, y "somepage.aspx" será el último elemento.
Anthony Pegram
1
Odio ser exigente, pero ¿no debería ser index> = 0?
Jenny O'Reilly
103

Para eliminar todo antes del primero /

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

Para eliminar todo después del primero /

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

Para eliminar todo antes del último /

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

Para eliminar todo después del último /

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

Una solución aún más simple para eliminar caracteres después de un carácter especificado es utilizar el método String.Remove () de la siguiente manera:

Para eliminar todo después del primero /

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

Para eliminar todo después del último /

input = input.Remove(input.LastIndexOf("/") + 1);
ePandit
fuente
77
Tenga en cuenta que todo esto arrojará 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, querrá tener eso en cuenta.
Elezar
7

Aquí hay otra solución simple. El siguiente código devolverá todo antes del '|' personaje:

if (path.Contains('|'))
   path = path.Split('|')[0];

De hecho, podría tener tantos separadores como desee, pero suponiendo que solo tenga un carácter de separación, así es como obtendrá todo después del '|':

if (path.Contains('|'))
   path = path.Split('|')[1];

(Todo lo que cambié en el segundo fragmento de código fue el índice de la matriz).

Joy Pinckard
fuente
6

La clase Uri es generalmente su mejor apuesta para manipular URL.

Ian Mercer
fuente
77
Un ejemplo de enlace sería bueno.
Trevor
1

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

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

Lo que esto hace es tomar todo antes del $ char y eliminarlo. Ahora, si desea eliminar los elementos después de un personaje, ¡simplemente cambie el +1 a -1 y estará listo!

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

TGarrett
fuente
1

Request.QueryStringle ayuda a obtener los parametersvalores y incluidos en elURL

ejemplo

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

entonces la variable del nombre del cliente debe ser igual a Dave

Saludos

Dave
fuente
0

Segundo Hightechrider: hay una clase de URL especializada ya construida para ti.

Sin embargo, también debo señalar que el replaceAll de PHP usa expresiones regulares para el patrón de búsqueda, lo que también puedes hacer en .NET: mira la clase RegEx.

Fyodor Soikin
fuente
0

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

aquí, lo que sea en [] es el nombre del querystringque desea eliminar.

Prueba esto ... Espero que esto ayude.

shary.sharath
fuente