如何从这个字符串中提取子字符串?

时间:2012-03-22 22:18:01

标签: c# string substring

我正在尝试在URL的末尾提取字符串。例如:

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

我正在尝试从该字符串中获取ExtractThisString.exe,但它有一个未知数量的\。我希望它基本上抓住URL并列出最后的内容。

6 个答案:

答案 0 :(得分:8)

使用System.IO.Path类的辅助方法。在你的情况下:

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

只是为了好玩,如果你必须自己制作,你应该开始搜索最后Path.DirectorySeparatorChar的索引。 如果这不是字符串中的最后一个字符,那么您可以使用String.Substring提取该索引后的所有文字。

答案 1 :(得分:3)

要查找指定字符的最后一次出现,请使用

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

然后提取子字符串

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

修改 我在15个月后回顾这个答案,因为我真的错过了问题中的一个关键点。 OP正在尝试提取文件名,而不仅仅是查找给定字符的最后一次出现。因此,虽然我的答案在技术上是正确的,但它并不是最好的,因为.NET框架有一个专门的类来处理文件名和路径。这个类称为Path,您可以找到一种简单而有效的方法来使用Path.GetFileName来实现您的结果,如@Adriano的回答所述。

我还要强调一点,使用Path类中的方法可以获得代码可移植性,因为当不同的操作系统使用不同的目录分隔符char时,类会处理这种情况。

答案 2 :(得分:3)

试试这个

var str = @"C:\this\that\ExtractThisString.exe";
var filename = str.Substring(str.LastIndexOf("\\")+1);

答案 3 :(得分:1)

为所有事情做一次......

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

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

OR

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

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

答案 4 :(得分:1)

string path = @"c:\this\that\extractthisstring.exe";
Console.WriteLine(path.Split('\\').Reverse().First());

答案 5 :(得分:0)

我使用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");