【发布时间】:2011-03-16 15:24:48
【问题描述】:
我有以下几点:
string test = "9586-202-10072"
如何将所有字符都放在最后一个 - 的右侧,所以 10072。最后一个破折号右侧的字符数总是不同的。
如何做到这一点?
【问题讨论】:
标签: c#
我有以下几点:
string test = "9586-202-10072"
如何将所有字符都放在最后一个 - 的右侧,所以 10072。最后一个破折号右侧的字符数总是不同的。
如何做到这一点?
【问题讨论】:
标签: c#
您可以通过str.LastIndexOf('-') 获得最后一个- 的位置。所以下一步很明显:
var result = str.Substring(str.LastIndexOf('-') + 1);
更正:
正如 Brian 下面所说,在没有破折号的字符串上使用 this 将导致返回原始字符串。
【讨论】:
str 为 null 或根本不包含连字符时,此操作才会失败。 (在没有连字符的情况下,它不会抛出;它会返回整个源字符串。)
LastIndexOf 返回 -1(这是记录在案的行为,因此可以安全地依赖它)。 str.Substring(1-1) 给你一个等于str 的字符串。没有惊喜,在这里。
您可以使用 LINQ,并为自己节省显式解析:
string test = "9586-202-10072";
string lastFragment = test.Split('-').Last();
Console.WriteLine(lastFragment);
【讨论】:
我可以看到这篇文章被浏览了超过 46,000 次。我敢打赌,46,000 名观众中的许多人都在问这个问题,仅仅是因为他们只想要文件名......如果你不能使用 at 符号逐字显示子字符串,那么这些答案可能是一个兔子洞。
如果您只是想获取文件名,那么这里应该提到一个简单的答案。即使这不是问题的准确答案。
result = Path.GetFileName(fileName);
见https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx
【讨论】:
string tail = test.Substring(test.LastIndexOf('-') + 1);
【讨论】:
YourString.Substring(YourString.LastIndexOf("-"));
【讨论】:
string atest = "9586-202-10072";
int indexOfHyphen = atest.LastIndexOf("-");
if (indexOfHyphen >= 0)
{
string contentAfterLastHyphen = atest.Substring(indexOfHyphen + 1);
Console.WriteLine(contentAfterLastHyphen );
}
【讨论】:
【讨论】:
我为此创建了一个字符串扩展名,希望对您有所帮助。
public static string GetStringAfterChar(this string value, char substring)
{
if (!string.IsNullOrWhiteSpace(value))
{
var index = value.LastIndexOf(substring);
return index > 0 ? value.Substring(index + 1) : value;
}
return string.Empty;
}
【讨论】:
test.Substring[(test.LastIndexOf('-') + 1)..]
C# 8(2019 年末)引入了 range 运算符并进一步简化了它。这里的两个点表示从索引(含)到字符串的结尾。
【讨论】:
test.Substring(test.LastIndexOf("-"))
【讨论】:
并且...如果您需要字符串的左侧部分:
private string AllTheLeftPart(string theString)
{
string rightPart = theString.Substring(theString.LastIndexOf('-') + 1);
string leftPart theString.Replace("-" + rightPart, String.Empty);
return leftPart ;
}
【讨论】: