在 .Split() 后快速选择最后一个元素。

85
我有这段代码:
stringCutted = myString.Split("/"). // ???

我想直接、快速地将string[]数组拆分后的最后一个元素存储在stringCutted中,而不需要将拆分后的数组存储在变量中,然后使用array[array.length]来访问该元素。

在C#中是否有可能实现这一点?


4
剪切过的 - Phill Healey
1
一个被切割的字符串 :) - markzzz
6个回答

188
如果您使用的是.NET 3.5或更高版本,则可以使用LINQ to Objects轻松实现:
stringCutted = myString.Split('/').Last();
请注意,Last()(没有谓词)针对实现了IList<T>接口的源(例如单维数组)进行了优化,因此它不会迭代整个数组以查找最后一个元素。另一方面,该优化未记录在文档中...

6
没错,那是因为 LINQ,你需要在代码中加入 'using System.Linq;'。 - Rumplin
1
这个可以工作,但不是每次都能。实际上,Split("/") 给我一个错误。Split('/') 可以工作... - markzzz
@markzzz:已修复。我假设您一开始就发布了可工作的代码(因为您的问题使用了双引号)。 - Jon Skeet
是的,事实上那就是错误 :) 在发布问题之前我尝试使用了Last()...!嘿,谢谢。 - markzzz

32
stringCutted=myString.Split("/").Last()

但是,仅供参考,如果你想从路径中获取文件名,这种方法要好得多:

var fileName=System.IO.Path.GetFileName("C:\\some\path\and\filename.txt"); 
// yields: filename.txt

很好的答案,但我很好奇为什么这比使用上述方法拆分文件更好? - Jimmy Long

15

由于您希望直接快速返回最后一个元素的解决方案,而不需要将分割后的数组存储起来,我认为这可能会有所帮助:

stringCutted = myString.Substring(myString.LastIndexOf("/")+1);

2

Use LINQ

"t/e/s/t".Split("/").Last();

2
使用此代码时,我会从Url链接中跳过最后一个元素。
string url = Request.Url.ToString().Substring(0, Request.Url.ToString().LastIndexOf('/'));

2

补充:

当字符串格式为'a/b/c/d'时,

yourstring.Split("/").Last();

当字符串格式为\head_display\27_[Item A]\head_image\original_image\1_Item A.png时,

yourstring.Split("\\").Last();

第一个 '\' 实际上是为了跳过第二个 '\'。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接