C # Использование подстроки, как извлечь эту строку? - PullRequest
2 голосов
/ 13 января 2009

Я хочу извлечь первую папку в URL-адресе ниже, в этом примере она называется «extractThisFolderName», но папка может иметь любое имя и иметь любую длину. Имея это в виду, как я могу использовать подстроку для извлечения первого имени папки?

Строка: www.somewebsite.com/extractThisFolderName/leave/this/behind

String folderName = path.Substring(path.IndexOf(@"/"),XXXXXXXXXXX);

Это длина, с которой я борюсь.

Ответы [ 7 ]

17 голосов
/ 13 января 2009

Если вы получаете Uri, почему бы просто не сделать uri.Se сегментов [0]?

Или даже path.Split(new Char[] { '/' })[1]?

1 голос
/ 13 января 2009

Проблема также поддается регулярным выражениям. Выражение как:

(?<host>.*?)/(?<folder>.*?)/

Понятно, что происходит, и вы можете получить данные по этим именам.

1 голос
/ 13 января 2009

Ответ Даниила дает вам другие практические способы сделать это. Другая альтернатива с использованием подстроки:

int start = path.IndexOf('/')+1; // Note that you don't need a verbatim string literal
int secondSlash = path.IndexOf('/', start);
return path.Substring(start, secondSlash-start);

Вы, конечно, захотите добавить туда проверку ошибок:)

1 голос
/ 13 января 2009

Если вы собираетесь использовать каждую часть пути, вы можете использовать:

String[] parts = path.Split('/');

В этот момент вы можете получить доступ к части "extractThisFolderName", обратившись к деталям [1].

В качестве альтернативы, вы можете сделать это, чтобы объединить имя:

int firstSlashIndex = path.IndexOf('/');
int secondSlashIndex = path.IndexOf('/', firstSlashIndex + 1);
String folderName = path.Substring(firstSlashIndex + 1, secondSlashIndex - firstSlashIndex);
0 голосов
/ 13 января 2009
folderName.Split('/')[1]
0 голосов
/ 13 января 2009

Вы можете сделать:

string myStr = "www.somewebsite.com/extractThisFolderName/leave/this/behind";
int startIndex = myStr.IndexOf('/') + 1;
int length = myStr.IndexOf('/', startIndex) - startIndex;
Console.WriteLine(myStr.Substring(startIndex, length));

В тот же момент я предполагаю, что это делается в ASP.Net, если я думаю, что может быть другой способ получить это без привязки к запросу.

0 голосов
/ 13 января 2009
int start = path.IndexOf('/');
int end = path.IndexOf('/', start + 1);
if (end == -1) end = path.Length;
string folderName = path.Substring(start + 1, end - start - 1);

РЕДАКТИРОВАТЬ: Ответ Даниэля Шаффера об использовании сегментов Uri предпочтительнее, но оставил это, поскольку это может быть ваш путь не является действительным URI.

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