【问题标题】:Split string by last separator按最后一个分隔符拆分字符串
【发布时间】:2025-11-21 23:50:02
【问题描述】:

我拥有的是一个巨大的文本文件,其中包含一堆由\ 分割的字符串。我的问题是可能有 5 个 \ 或 4 个 \ 或 3 个 \

无论有多少个\,我都需要拉出最后一个。任何帮助表示赞赏。

例子:

我需要这个 我\想要\行\这个 你好\给\我\所有\这

例如,我需要 this 这个词,但显然它不仅仅是 this 这个词。

【问题讨论】:

  • 给定一个没有“\”的字符串,函数应该返回整个字符串还是一个空字符串?例如传递“Hello”,它应该返回“Hello”还是“”?

标签: c#


【解决方案1】:
string last = inputString.Substring(inputString.LastIndexOf('\\') + 1);

【讨论】:

  • +1:需要注意的是,您首先检查一个空字符串if(!string.IsNullOrEmpty(inputString)),如果字符串中没有“\”,那么您需要整个字符串:)
  • 空值检查是正确的,应该经常检查。 LastIndexOf(..) + 1 的好处是 LastIndexOf(..) 将针对找不到的字符返回 -1,因此最终结果是从位置 0 获取子字符串,这是开始字符串,所以返回整个字符串。
  • 同意,在所有方面,但要求很可能是如果没有“\”,则返回一个空字符串。我只是说应该检查哪些是必需的行为。
【解决方案2】:
string myString = inputString.Split('\\').Last();

【讨论】:

  • .NET 规则 34 - 如果存在,则有 LINQ。 :-)
  • 为了安全起见,可能应该是LastOrDefault()
  • 真的吗?我曾想过最坏的情况(inputstring == string.Empty),inputString.Split('\\') 仍然会返回一个字符串的数组,当然 == string.Empty
【解决方案3】:

差点忘了这个(虽然有点厚脸皮):

string result = Path.GetFilename(input);

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • 由于质量低,已被标记。确实如此,它仅适用于 Windows。 (我意识到问题是关于C#的,它通常用于Windows环境,但可以通过Mono移植到其他平台。)
  • 我会接受它仅适用于 Windows 的事实可能是相关的,但这并不是声称它质量低下的真正合理论据。大多数答案在某些情况下不起作用。事实上,OP 没有解释他为什么要这样做,提取文件名完全有可能正是他想要做的,当然这对于其他正在为此寻找答案的读者来说可能是理想的。