Удалить символы после определенного символа в строке, а затем удалить подстроку?
Мне кажется, что это глупое сообщение, когда это кажется простым и есть множество вопросов о строках/символах/регулярных выражениях, но я не мог найти то, что мне нужно (кроме другого языка: Удалить весь текст после определенной точки).
У меня есть следующий код:
[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];
(Все, что я изменил во втором фрагменте кода, был индекс массива.)