Удалить символы после определенного символа в строке, а затем удалить подстроку?

Мне кажется, что это глупое сообщение, когда это кажется простым и есть множество вопросов о строках/символах/регулярных выражениях, но я не мог найти то, что мне нужно (кроме другого языка: Удалить весь текст после определенной точки).

У меня есть следующий код:

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

Я попробовал решение в вопросе выше (надеясь, что синтаксис будет таким же!), но нет. Я хочу сначала удалить queryString, которая может быть любой переменной длины, а затем удалить имя страницы, которая снова может быть любой длины.

Как я могу удалить строку запроса из полного URL-адреса, чтобы пройти этот тест?

Ответ 1

Для манипуляции с строкой, если вы просто хотите убить все после?, вы можете сделать это

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

Изменить: если все после последней косой черты сделать что-то вроде

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

В качестве альтернативы, поскольку вы работаете с URL-адресом, вы можете сделать что-то с ним, как этот код

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

Ответ 2

Чтобы удалить все до первого /

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

Чтобы удалить все после первого /

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

Чтобы удалить все до последнего /

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

Чтобы удалить все после последнего /

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

Еще более простым решением для удаления символов после указанного символа является использование метода String.Remove() следующим образом:

Чтобы удалить все после первого /

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

Чтобы удалить все после последнего /

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

Ответ 3

Класс Uri - это, как правило, лучший способ манипулировать Urls.

Ответ 4

Request.QueryString поможет вам получить parameters и значения, включенные в URL

Пример

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

поэтому переменная пользовательского имени должна быть равна dave

рассматривает

Ответ 5

I second Hightechrider: для вас уже создан специализированный класс Url.

Я также должен указать, что PHP replaceAll использует регулярные выражения для шаблона поиска, которые вы также можете использовать в .NET. Посмотрите на класс RegEx.

Ответ 6

вы можете использовать встроенный метод .NET для удаления QueryString. то есть Request.QueryString.Remove["whatever"];

здесь, независимо от того, что в [] является именем QueryString, которое вы хотите удалить.

Попробуйте это... Надеюсь, это поможет.

Ответ 7

Чтобы удалить все до определенного char, используйте ниже.

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

Что это такое, берет все перед $ char и удаляет его. Теперь, если вы хотите удалить элементы после символа, просто измените +1 на -1 и вы установите!

Но для URL-адреса я использовал бы встроенный .NET-класс для этого.

Ответ 8

Здесь другое простое решение. Следующий код вернет все до '|' персонаж:

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

На самом деле, у вас может быть столько разделителей, сколько вы хотите, но при условии, что у вас есть только один символ разделения, вот как вы получите все после '|':

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

(Все, что я изменил во втором фрагменте кода, был индекс массива.)