171 votes

Supprimer les caractères après un caractère spécifique dans une chaîne, puis supprimer la sous-chaîne ?

Je me sens un peu bête de poster ceci alors que cela semble simple et qu'il y a des tonnes de questions sur les chaînes de caractères, les caractères et les expressions rationnelles, mais je n'ai pas trouvé ce dont j'avais besoin (sauf dans une autre langue) : http://stackoverflow.com/questions/2176544/remove-all-text-after-certain-point ).

J'ai le code suivant :

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

J'ai essayé la solution de la question ci-dessus (en espérant que la syntaxe soit la même !) mais non. Je veux d'abord supprimer la queryString, qui peut avoir une longueur variable, puis le nom de la page, qui peut lui aussi avoir une longueur variable.

Comment puis-je supprimer la chaîne de requête de l'URL complète pour que ce test passe ?

304voto

Anthony Pegram Points 58528

Pour la manipulation des chaînes de caractères, si vous voulez simplement tuer tout ce qui suit le ?, vous pouvez faire ceci

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

Edit : Si tout ce qui suit le dernier slash, faites quelque chose comme

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

Alternativement, puisque vous travaillez avec une URL, vous pouvez faire quelque chose avec elle comme ce code

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

1 votes

Ou serait-ce la dernière / ?

4 votes

Oh, oui, relis ça. Il peut faire LastIndexOf("/") dans ce cas.

1 votes

Merci x2 d'avoir proposé deux façons de procéder !

129voto

ePandit Points 86

Pour supprimer tout ce qui se trouve avant le premier "/"

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

Pour supprimer tout ce qui se trouve après le premier "/"

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

Pour supprimer tout ce qui se trouve avant le dernier "/"

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

Pour supprimer tout ce qui se trouve après le dernier "/"

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

Une option encore plus simple pour supprimer les caractères après le caractère spécifié consiste à utiliser la méthode string.Remove() comme suit :

Pour supprimer tout ce qui se trouve après le premier "/"

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

Pour supprimer tout ce qui se trouve après le dernier "/"

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

8 votes

Sachez que tous ces exemples seront rejetés si la chaîne ne contient pas de "/". Ce n'est évidemment pas un problème si vous travaillez avec des chaînes codées en dur comme dans la question initiale, mais dans la plupart des cas, vous devrez en tenir compte.

1 votes

@Elezar Je pense que vous voulez dire "lancera une exception" et non "un exemple", mais votre point est bien fait.

1 votes

Hah, ça fait 5 ans et demi que c'est là, et personne ne l'a mentionné avant. Oui, vous avez tout à fait raison, je voulais dire "exception".

5voto

Ian Mercer Points 19271

La classe Uri est généralement le meilleur moyen de manipuler les urls.

7 votes

Un exemple de lien serait bienvenu.

0voto

Fyodor Soikin Points 7907

Je suis d'accord avec Hightechrider : il y a une classe Url spécialisée déjà construite pour vous.

Je dois cependant souligner que le replaceAll de PHP utilise des expressions régulières pour le motif de recherche, ce que vous pouvez faire également en .NET - regardez la classe RegEx.

0voto

shary.sharath Points 11

vous pouvez utiliser la méthode intégrée de .NET pour supprimer l'étiquette de l'utilisateur. QueryString . c'est-à-dire, Request.QueryString.Remove["whatever"];

ici quoi que ce soit dans le [ ] est le nom de la querystring que vous voulez supprimer.

Essayez ceci... J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X