将所有字符放到最后一个破折号的右边

use*_*432 102 c#

我有以下内容:

string test = "9586-202-10072"
Run Code Online (Sandbox Code Playgroud)

如何将所有角色都放到最后一个-10072 的右边.字符数总是与最后一个破折号的右边不同.

如何才能做到这一点?

Jon*_*Jon 213

你可以得到最后的位置-str.LastIndexOf('-').所以下一步显而易见:

var result = str.Substring(str.LastIndexOf('-') + 1);
Run Code Online (Sandbox Code Playgroud)

更正:

正如Brian在下面所述,在没有破折号的字符串上使用它将导致返回相同的字符串.

  • 好吧,如果找不到任何内容,`LastIndexOf`返回-1(这是记录的行为,所以依赖它是安全的).`str.Substring(1-1)`给你一个等于`str`的​​字符串.这里没有惊喜. (3认同)
  • 即使连字符是最后一个字符,这种方法也有效,在这种情况下它会正确返回空字符串。仅当“str”为空或根本不包含连字符时,此操作才会失败。(在没有连字符的情况下,它不会抛出;它返回整个源字符串。) (2认同)
  • @Brian:我想我在同一个琐碎的陈述中打破了大多数错误的记录。教训:事后不要在没有校对代码的情况下写任何东西。谢谢。 (2认同)

p.c*_*ell 54

您可以使用LINQ,并自己保存显式解析:

string test = "9586-202-10072";
string lastFragment = test.Split('-').Last();

Console.WriteLine(lastFragment);
Run Code Online (Sandbox Code Playgroud)

  • 这可能会节省大部分开发人员的时间,但在一般情况下请注意,像这样的代码会有很多字符串分配(在上面的示例中可能只有四个),因此在性能关键部分可能会被强调. (5认同)

小智 6

我可以看到这篇文章的浏览量超过 46,000 次。我敢打赌,46,000 名观众中的许多人问这个问题只是因为他们只想要文件名......如果您无法使用 at 符号逐字生成子字符串,那么这些答案可能是一个兔子洞。

如果您只想获取文件名,那么这里应该提到一个简单的答案。即使这不是问题的准确答案。

result = Path.GetFileName(fileName);
Run Code Online (Sandbox Code Playgroud)

请参阅https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx


Luk*_*keH 5

string tail = test.Substring(test.LastIndexOf('-') + 1);
Run Code Online (Sandbox Code Playgroud)