Remover caracteres após caracteres específicos na string e remover substring?

140

Eu me sinto meio idiota ao postar isso quando isso parece meio simples e há toneladas de perguntas sobre strings / caracteres / regex, mas não consegui encontrar exatamente o que eu precisava (exceto em outro idioma: Remover todo o texto após determinado ponto ).

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 sintaxe fosse a mesma!) Mas não. Quero primeiro remover a queryString que pode ter qualquer tamanho variável e, em seguida, remover o nome da página, que novamente pode ter qualquer tamanho.

Como posso remover a string de consulta do URL completo para que este teste seja aprovado?

SventoryMang
fonte

Respostas:

264

Para manipulação de strings, se você quiser 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 após a ú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

Como alternativa, como você trabalha com um URL, 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);
Anthony Pegram
fonte
1
Ou seria o último /?
Charlie Sais
4
Ah, sim, releia isso. Ele pode fazer LastIndexOf ("/") nesse caso.
Anthony Pegram
1
Obrigado x2 por fornecer duas maneiras de fazer isso!
precisa saber é o seguinte
1
@gsvirdi, nesse caso, você pode carregar esse URL Uri urie acessar uri.Segments. Isso retornará uma matriz e "somepage.aspx" será o último item.
Anthony Pegram
1
Eu odeio ser exigente, mas não deveria ser index> = 0?
21913 Jenny O'Reilly
103

Para remover tudo antes do primeiro /

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

Para remover tudo após o primeiro /

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

Para remover tudo antes do último /

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

Para remover tudo após o último /

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

Uma solução ainda mais simples para remover caracteres após um caractere especificado é usar o método String.Remove () da seguinte maneira:

Para remover tudo após o primeiro /

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

Para remover tudo após o último /

input = input.Remove(input.LastIndexOf("/") + 1);
ePandit
fonte
7
Esteja ciente de que tudo isso dará um exemplo se a sequência não contiver um "/". Obviamente, isso não será um problema se você estiver trabalhando com seqüências codificadas como na pergunta original, mas na maioria dos casos, convém levar isso em consideração.
Elezar 14/01
7

Aqui está outra solução simples. O código a seguir retornará tudo antes do '|' personagem:

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

Na verdade, você pode ter quantos separadores quiser, mas, assumindo que você tem apenas um caractere de separação, eis como você obteria tudo após o '|':

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

(Tudo o que mudei no segundo trecho de código foi o índice da matriz.)

Joy Pinckard
fonte
6

A classe Uri geralmente é sua melhor aposta para manipular URLs.

Ian Mercer
fonte
7
Um exemplo de link seria bom.
quer
1

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

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

O que isso faz é pegar tudo antes do $ char e removê-lo. Agora, se você deseja remover os itens após um personagem, basta alterar o +1 para -1 e pronto!

Mas para uma URL, eu usaria a classe .NET incorporada para tirar isso.

TGarrett
fonte
1

Request.QueryStringajuda você a obter os parametersvalores e incluídos noURL

exemplo

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

portanto, a variável customername deve ser igual a dave

Saudações

Dave
fonte
0

Eu segundo Hightechrider: já existe uma classe de URL especializada para você.

Devo também salientar, no entanto, que o replaceAll do PHP usa expressões regulares para o padrão de pesquisa, o que você também pode fazer no .NET - veja a classe RegEx.

Fyodor Soikin
fonte
0

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

aqui o que quer que em [] seja o nome do querystringqual você deseja remover.

Tente isso ... Espero que isso ajude.

shary.sharath
fonte