web-dev-qa-db-fra.com

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

Je me sens un peu bête de poster ceci quand cela semble assez simple et qu'il y a une foule de questions sur les chaînes/caractères/regex, mais je ne trouvais pas exactement ce dont j'avais besoin (sauf dans une autre langue: Supprimer tout le texte après un 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 dans la question ci-dessus (en espérant que la syntaxe serait la même!) Mais non. Je veux d'abord supprimer le queryString qui pourrait être n'importe quelle longueur variable, puis supprimer le nom de la page, qui pourrait encore être n'importe quelle longueur.

Comment puis-je obtenir le retrait de la chaîne de requête de l'URL complète de sorte que ce test réussisse?

113
SventoryMang

Pour la manipulation des cordes, si vous voulez juste tout tuer après le? 

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

Edit: Si tout après la dernière barre oblique, 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 en faire quelque chose 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);
217
Anthony Pegram

Pour tout supprimer avant le premier /

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

Pour tout supprimer après le premier /

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

Pour tout supprimer avant le dernier /

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

Pour tout supprimer après le dernier /

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

Une solution encore plus simple pour supprimer des caractères après un caractère spécifié consiste à utiliser la méthode String.Remove () comme suit:

Pour tout supprimer après le premier /

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

Pour tout supprimer après le dernier /

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

La classe Uri est généralement votre meilleur choix pour manipuler les URL.

6
Ian Mercer

Request.QueryString vous aide à obtenir la parameters et les valeurs incluses dans la URL

exemple 

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

donc la variable nom d'utilisateur doit être égale à dave

cordialement

1
dave

Pour tout supprimer avant un caractère spécifique, utilisez ci-dessous.

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

Cela prend tout ce qui précède le caractère $ et le supprime. Maintenant, si vous voulez supprimer les objets après un personnage, remplacez le +1 par un -1 et le tour est joué! 

Mais pour une URL, j'utiliserais la classe .NET intégrée pour prendre cela. 

0
TGarrett

Voici une autre solution simple. Le code suivant retournera tout ce qui précède le '|' personnage:

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

En fait, vous pouvez avoir autant de séparateurs que vous le souhaitez, mais en supposant que vous n’ayez qu’un caractère de séparation, voici comment vous obtiendrez tout après le '|':

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

(Tout ce que j'ai changé dans le deuxième morceau de code était l'index du tableau.)

0
Joy Pinckard

En second lieu, Hightechrider: il existe déjà une classe d’URL spécialisée pour vous.

Cependant, je dois également signaler que PHP replaceAll utilise des expressions régulières pour les motifs de recherche, ce que vous pouvez faire également en .NET - regardez la classe RegEx.

0
Fyodor Soikin