Как извлечь подстроку из этой строки? - PullRequest
3 голосов
/ 23 марта 2012

Я пытаюсь извлечь строку в конце URL.Пример:

C:\this\that\ExtractThisString.exe
             ^^^^^^^^^^^^^^^^^^^^^

Я пытаюсь получить ExtractThisString.exe из этой строки, однако она имеет неизвестное количество \.Я хочу, чтобы он в основном захватывал URL и перечислял все, что находится в конце.

Ответы [ 6 ]

8 голосов
/ 23 марта 2012

Используйте вспомогательные методы класса System.IO.Path. В вашем случае:

string fileName = Path.GetFileName(@"C:\this\that\ExtractThisString.exe");

Просто для удовольствия, если вам нужно сделать это самостоятельно, вы должны начать поиск индекса последнего Path.DirectorySeparatorChar . Если это не последний символ в строке, вы можете использовать String.Substring для извлечения всего текста после этого индекса.

3 голосов
/ 23 марта 2012

Попробуйте это

var str = @"C:\this\that\ExtractThisString.exe";
var filename = str.Substring(str.LastIndexOf("\\")+1);
3 голосов
/ 23 марта 2012

Чтобы найти последнее вхождение указанного символа, используйте

int pos = yourString.LastIndexOf(@"\");

затем извлеките подстроку

string lastPart = yourString.Substring(pos+1);

EDIT Я рассматриваю этот ответ через 15 месяцев, потому что я действительно упустил ключевой момент в этом вопросе. ОП пытается извлечь имя файла, а не просто найти последнее вхождение данного символа. Таким образом, хотя мой ответ технически верен, он не самый лучший, потому что в инфраструктуре NET есть специальный класс для обработки имени файла и путей. Этот класс называется Path , и вы можете найти простой и очень эффективный способ достижения вашего результата, используя Path.GetFileName , как объяснено в ответе @Adriano.

Я также хотел бы подчеркнуть тот факт, что при использовании методов из класса Path вы получаете преимущество переносимости кода, поскольку этот класс обрабатывает ситуацию, когда другая операционная система использует другой символ разделителя каталогов.

1 голос
/ 23 марта 2012
string path = @"c:\this\that\extractthisstring.exe";
Console.WriteLine(path.Split('\\').Reverse().First());
1 голос
/ 23 марта 2012

Сделай это раз и навсегда ...

public static string FileAndExtension(this string aFilePath) {
 return aFilePath.Substring(aFilePath.LastIndexOf("\\") + 1);
}

"C:\\this\\that\\ExtractThisString.exe".FileAndExtension()

ИЛИ

public static string EverythingAfterLast(this string aString, string aSeperator) {
 return aString.Substring(aString.LastIndexOf(aSeperator) + 1);
}

"C:\\this\\that\\ExtractThisString.exe".EverythingAfterLast("\\")

0 голосов
/ 28 июля 2015

Я нахожу и использую этот элегантный способ, используя System.IO

string file1 = Path.GetFileName(@"C:\this\that\ExtractThisString.exe");

или, если хотите, без расширения

string file2 = Path.GetFileNameWithoutExtension(@"C:\this\that\ExtractThisString.exe");

или только расширение

string ext = Path.GetExtension(@"C:\this\that\ExtractThisString.exe");

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