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?
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);
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);
La classe Uri est généralement votre meilleur choix pour manipuler les URL.
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
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.
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.)
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.