Remove characters after specific character in string, then remove substring?

C#.NetString

C# Problem Overview


I feel kind of dumb posting this when this seems kind of simple and there are tons of questions on strings/characters/regex, but I couldn't find quite what I needed (except in another language: https://stackoverflow.com/questions/2176544/remove-all-text-after-certain-point).

I've got the following code:

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

I tried the solution in the question above (hoping the syntax would be the same!) but nope. I want to first remove the queryString which could be any variable length, then remove the page name, which again could be any length.

How can I get the remove the query string from the full URL such that this test passes?

C# Solutions


Solution 1 - C#

For string manipulation, if you just want to kill everything after the ?, you can do this

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

Edit: If everything after the last slash, do something like

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

Alternately, since you're working with a URL, you can do something with it like this code

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

Solution 2 - C#

To remove everything before the first /

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

To remove everything after the first /

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

To remove everything before the last /

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

To remove everything after the last /

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

An even more simpler solution for removing characters after a specified char is to use the String.Remove() method as follows:

To remove everything after the first /

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

To remove everything after the last /

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

Solution 3 - C#

Here's another simple solution. The following code will return everything before the '|' character:

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

In fact, you could have as many separators as you want, but assuming you only have one separation character, here is how you would get everything after the '|':

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

(All I changed in the second piece of code was the index of the array.)

Solution 4 - C#

The Uri class is generally your best bet for manipulating Urls.

Solution 5 - C#

To remove everything before a specific char, use below.

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

What this does is, takes everything before the $ char and removes it. Now if you want to remove the items after a character, just change the +1 to a -1 and you are set!

But for a URL, I would use the built in .NET class to take of that.

Solution 6 - C#

Request.QueryString helps you to get the parameters and values included within the URL

example

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

so the customername variable should be equal to dave

regards

Solution 7 - C#

I second Hightechrider: there is a specialized Url class already built for you.

I must also point out, however, that the PHP's replaceAll uses regular expressions for search pattern, which you can do in .NET as well - look at the RegEx class.

Solution 8 - C#

you can use .NET's built in method to remove the QueryString. i.e., Request.QueryString.Remove["whatever"];

> here whatever in the [ ] is name of the querystring which you want to > remove.

Try this... I hope this will help.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSventoryMangView Question on Stackoverflow
Solution 1 - C#Anthony PegramView Answer on Stackoverflow
Solution 2 - C#ePanditView Answer on Stackoverflow
Solution 3 - C#Joy PinckardView Answer on Stackoverflow
Solution 4 - C#Ian MercerView Answer on Stackoverflow
Solution 5 - C#TGarrettView Answer on Stackoverflow
Solution 6 - C#daveView Answer on Stackoverflow
Solution 7 - C#Fyodor SoikinView Answer on Stackoverflow
Solution 8 - C#shary.sharathView Answer on Stackoverflow