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

141

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

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

SventoryMang
la source

Réponses:

267

Pour la manipulation de chaînes, si vous voulez simplement tout tuer après le?, Vous pouvez le faire

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 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);
Anthony Pegram
la source
1
Ou serait-ce le dernier /?
Charlie Salts
4
Oh, ouais, relisez ça. Il peut faire LastIndexOf ("/") dans ce cas.
Anthony Pegram
1
Merci x2 d'avoir fourni deux façons de faire cela!
SventoryMang
1
@gsvirdi, dans ce cas, vous pouvez charger cette URL dans Uri uri, puis y accéder uri.Segments. Cela renverra un tableau et "somepage.aspx" sera le dernier élément.
Anthony Pegram
1
Je déteste être pointilleux, mais ne devrait-il pas être index> = 0?
Jenny O'Reilly
104

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 char 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);
ePandit
la source
7
Sachez que tout cela jettera un exemple si la chaîne ne contient pas du tout un "/". De toute évidence, ce ne sera pas un problème si vous travaillez avec des chaînes codées en dur comme dans la question d'origine, mais dans la plupart des cas, vous voudrez en tenir compte.
Elezar le
7

Voici une autre solution simple. Le code suivant renverra tout avant le '|' personnage:

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

En fait, vous pourriez avoir autant de séparateurs que vous le souhaitez, mais en supposant que vous n'ayez qu'un seul 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.)

Joy Pinckard
la source
6

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

Ian Mercer
la source
7
Un exemple de lien serait bien.
Trevor
1

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

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

Cela fait, prend tout avant le $ char et le supprime. Maintenant, si vous voulez supprimer les éléments après un personnage, changez simplement le +1 en -1 et vous êtes prêt!

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

TGarrett
la source
1

Request.QueryStringvous aide à parametersinclure les valeurs et dans leURL

exemple

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

donc la variable customername doit être égale à dave

Cordialement

Dave
la source
0

Je seconde Hightechrider: il existe une classe Url spécialisée déjà créée pour vous.

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

Fyodor Soikin
la source
0

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

ici quel que soit le [] est le nom du querystringque vous voulez supprimer.

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

shary.sharath
la source