Изменить String.Substring

108
8

string url = "www.google.com/?filter=xpto";
string domain = url.Contains('?')
? url.Substring(0, url.IndexOf('?'));
: url;

Есть ли более простой способ сделать это без необходимости переопределять метод подстроки?

спросил(а) 2021-01-25T16:04:54+03:00 4 месяца, 4 недели назад
1
Решение
77

Вы можете написать собственный метод расширения:

public static string GetDomain(this string url)
{
return url.Contains('?')
? url.Substring(0, url.IndexOf('?'));
: url;
}

Применение:

string domain = url.GetDomain();

ответил(а) 2021-01-25T16:04:54+03:00 4 месяца, 4 недели назад
63

Вы также не должны использовать строковые методы, если работаете с Uri s. Поскольку ваш uri несколько искажен (в нем нет протокола), немного сложнее извлечь домен:

string url = "www.google.com/?filter=xpto";
if (!url.Contains("://")) url = "http://" + url; // presume HTTP
string domain = url;
string host = url;
Uri uri;
if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out uri))
{
domain = uri.GetLeftPart(UriPartial.Authority); // http://www.google.com
host = uri.Host; // www.google.com, without protocol or port
}

ответил(а) 2021-01-25T16:04:54+03:00 4 месяца, 4 недели назад
45

Почему бы вам не использовать класс Uri?

var url = new Uri("http://www.google.com/?filter=xpto");
var domain = url.Host;
Console.WriteLine(domain);

ответил(а) 2021-01-25T16:04:54+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема