Remover caracteres após caractere específico em string e, em seguida, remover substring?

Eu me sinto meio idiota postando isso quando isso parece meio simples e há toneladas de perguntas sobre strings / characters / regex, mas eu não consegui encontrar exatamente o que eu precisava (exceto em outro idioma: Remove All Text After Certain Point ).

Eu tenho o seguinte 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); } 

Eu tentei a solução na pergunta acima (esperando que a syntax fosse a mesma!), Mas não. Eu quero primeiro remover o queryString que poderia ser qualquer comprimento variável, em seguida, remova o nome da página, que novamente poderia ser qualquer tamanho.

Como posso obter a string de consulta da URL completa de modo que esse teste seja aprovado?

Para manipulação de string, se você quer apenas matar tudo depois do?, Você pode fazer isso

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

Edit: Se tudo depois da última barra, faça 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, desde que você está trabalhando com um URL, você pode fazer algo com ele 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); 

Para remover tudo antes de primeiro “/”

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

Para remover tudo após primeiro “/”

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

Para remover tudo antes da última “/”

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

Para remover tudo depois da última “/”

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

Uma opção ainda mais simples para remover caracteres após o caractere especificado é usar o método string.Remove () da seguinte forma:

Para remover tudo após primeiro “/”

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

Para remover tudo depois da última “/”

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

A class Uri geralmente é sua melhor aposta para manipular Urls.

Request.QueryString ajuda você a obter os parameters e valores incluídos na URL

exemplo

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

então a variável customName deve ser igual a dave

Saudações

Eu segundo Hightechrider: há uma class de URL especializada já construída para você.

Devo também ressaltar, no entanto, que o replaceAll do PHP usa expressões regulares para o padrão de busca, o que você pode fazer no .NET também – veja a class RegEx.

Para remover tudo antes de um caractere específico, use abaixo.

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

O que isto faz é, pega tudo antes do $ char e o remove. Agora, se você quiser remover os itens depois de um personagem, basta alterar o +1 para -1 e você está pronto!

Mas para uma URL, eu usaria a class .NET embutida para tirar isso.

você pode usar o método QueryString do .NET para remover o QueryString . ie, Request.QueryString.Remove["whatever"];

aqui o que quer que seja no [] é o nome da querystring que você deseja remover.

Tente isso … Espero que isso ajude.