Удалить текст из строки, пока он не достигнет определенного символа - PullRequest
11 голосов
/ 04 декабря 2011

У меня проблема с попыткой выяснить это. Мне нужно "исправить" некоторые ссылки, вот пример:

  1. www.site.com / ссылка / index.php? REMOVETHISHERE
  2. www.site.com / index.php? REMOVETHISHERE

Так что в основном я хочу удалить все, пока оно не достигнет? персонаж. Спасибо за вашу помощь.

Ответы [ 4 ]

18 голосов
/ 04 декабря 2011
 string s = @"www.site.com/link/index.php?REMOVETHISHERE";
 s = s.Remove( s.LastIndexOf('?') );
 //Now s will be simply "www.site.com/link/index.php"

должен это сделать

3 голосов
/ 04 декабря 2011

Хотя правильно созданная строковая операция будет работать, более общий способ извлечения частичной информации URI заключается в использовании типа System.Uri, который имеет методы, которые инкапсулируют эти операции, например,

var uri = new Uri("http://www.site.com/link/index.php?REMOVETHISHERE");
var part = uri.GetLeftPart(UriPartial.Path);

Это будет более четко передавать цель вашего кода, и вы будете повторно использовать текущую реализацию, которая, как известно, работает.

Конструктор System.Uri сгенерирует исключение, если строка непредставляет действительный URI, но в любом случае вы, возможно, захотите вызвать другое поведение в вашей программе, если обнаружен неверный URI.Чтобы обнаружить недопустимый URI, вы можете перехватить исключение или использовать одну из перегрузок TryCreate().

2 голосов
/ 04 декабря 2011

Использование string.split.

string URL = "www.site.com/link/index.php?REMOVETHISHERE"
var parts = URL.Split('?');

Тогда parts[0] будет содержать "www.site.com/link/index.php", а parts[1] будет содержать "REMOVETHISHERE". Затем вы можете использовать любую нужную деталь.

Вы должны добавить проверки, чтобы убедиться, что есть две части, прежде чем пытаться получить доступ ко 2-му элементу массива. Вы можете (например) проверить, что строка содержит "?" прежде чем пытаться позвонить Split.

0 голосов
/ 22 сентября 2014

Удалить последнее "?"и все после него:

    string input = @"www.site.com/link/index.php?REMOVETHISHERE";
    input = input.Remove(input.LastIndexOf('?'));

    OR

    string input = @"www.site.com/link/index.php?REMOVETHISHERE";
    input = input.Substring(0, input.LastIndexOf('?'));

Теперь вывод будет:

www.site.com/link/index.php
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...