Видалити символи після конкретного символу в рядку, а потім видалити підрядку?


140

Мені здається, що це нерозумно публікує це, коли це здається простим і виникає безліч питань на рядках / символах / регулярному виразі, але я не зміг знайти те, що мені потрібно (за винятком іншої мови: Видалити весь текст після певного пункту ).

У мене є такий код:

[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-адреси таким чином, щоб цей тест пройшов?

Відповіді:


265

Для маніпуляцій зі струнами, якщо ви просто хочете вбити все після ?, ви можете це зробити

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

1
Або це було б останнє /?
Чарлі Сольс

4
О, так, перечитайте це. У цьому випадку він може зробити LastIndexOf ("/").
Ентоні Пеграм

1
Дякую x2 за надання двох способів зробити це!
SventoryMang

1
@gsvirdi, у такому випадку ви можете завантажити цю URL-адресу Uri uri, а потім отримати доступ uri.Segments. Це поверне масив, а "somepage.aspx" буде останнім елементом.
Ентоні Пеграм

1
Я ненавиджу бути вибагливим, але чи не повинен це бути індекс> = 0?
Дженні О'Рейлі

103

Щоб видалити все до першого /

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

7
Майте на увазі, що всі вони будуть прикладом, якщо рядок взагалі не містить "/". Очевидно, це не буде проблемою, якщо ви працюєте із жорстко зашифрованими рядками, як у оригінальному запитанні, але в більшості випадків ви захочете взяти це до уваги.
Елезар

7

Ось ще одне просте рішення. Наступний код поверне все до пункту "|" персонаж:

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

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

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

(Все, що я змінив у другому фрагменті коду, - це індекс масиву.)


6

Клас Uri, як правило, найкраща ставка для маніпулювання URL-адресами.


7
Приклад посилання був би непоганим.
Тревор

1

Щоб видалити все перед певним знаком, скористайтеся нижче.

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

Для цього потрібно взяти все до $ char і видалити його. Тепер якщо ви хочете видалити елементи після символу, просто змініть +1 на -1 і ви налаштовані!

Але для URL-адреси я використовував би вбудований клас .NET, щоб взяти це.


1

Request.QueryStringдопомагає отримати parametersзначення та значення, включені вURL

приклад

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

тому змінна назва клієнта повинна дорівнювати Дейву

з повагою


0

Я другий Hightechrider: для вас вже створений спеціалізований клас Url.

Треба також зазначити, що заміна PHP використовує регулярні вирази для шаблону пошуку, що можна зробити і в .NET - подивіться клас RegEx.


0

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

тут все, що в [], - це ім'я, querystringяке ви хочете видалити.

Спробуйте це ... Я сподіваюся, що це допоможе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.