按最后一个分隔符拆分字符串

24

我手头有一个包含多个字符串的大型文本文件,它们是由\分隔的。我的问题在于,这些字符串中会有5个\或4个\或3个\

我需要做的是无论有多少个\,都能够提取最后一个\。非常感谢您的帮助。

例如:

I\need\this
I\want\line\this
Hello\give\me\all\this

比如我需要提取单词this,但显然不仅仅是this这个单词。


给定一个没有“\”的字符串,函数应该返回整个字符串还是空字符串?例如,传入“Hello”,它应该返回“Hello”还是“”? - Binary Worrier
3个回答

54
string last = inputString.Substring(inputString.LastIndexOf('\\') + 1);

带一个警告,首先必须检查是否为空字符串if(!string.IsNullOrEmpty(inputString)),如果字符串中没有“\”则返回整个字符串 :) - Binary Worrier
11
空值检查是正确的,应该始终进行检查。使用LastIndexOf(..)+1的好处在于,如果找不到字符,则LastIndexOf(..)将返回-1,因此子字符串从位置0开始提取,即从字符串的开头开始,因此将返回整个字符串。 - Matthew Abbott
1
同意所有观点,但要求可能是如果没有“\”,则返回空字符串。我只是说应该检查哪种是所需的行为。 - Binary Worrier

19
string myString = inputString.Split('\\').Last();

5
.NET规则34 - 如果它存在,就有适合它的LINQ。 :-) - Christian Hayter
2
为了更加安全,可能应该使用 LastOrDefault() - Christian Hayter
1
真的吗?我本以为最坏的情况是(inputstring == string.Empty),inputString.Split('\\')仍然会返回一个字符串数组,当然等于string.Empty。 - Flynn1179

6

几乎忘记了这个(虽然有点无礼):

string result = Path.GetFilename(input);

这行代码的作用是获取文件路径中的文件名。

这并没有提供问题的答案。如果您想对作者进行批评或请求澄清,请在他们的帖子下留言。 - lxg
1
它因质量低下而被标记。实际上,它只能在Windows上运行。(我意识到这个问题是关于C#的,通常在Windows环境中使用,但可以通过Mono移植到其他平台。) - lxg
3
我理解你的意思是承认它只在Windows上运行可能很重要,但这并不是声称它质量低劣的合理论据。大多数答案在某些情况下都不起作用。事实上,OP没有解释他为什么要这样做,完全有可能提取文件名正是他想要做的,对于另一个正在寻找答案的读者来说,这也可能是理想的答案。 - Flynn1179

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