如何在最后一个点处将字符串拆分成两个部分,以最佳方式且符合惯用语?基本上是将扩展名与文件路径或URL中的其余部分分离。到目前为止,我所做的是Split("."),然后使用String.Join(".")除了最后一部分之外的所有内容。听起来像是杀鸡焉用牛刀。
如果你想要更好的性能,可以考虑以下方式:
string s = "a.b.c.d";
int i = s.LastIndexOf('.');
string lhs = i < 0 ? s : s.Substring(0,i),
rhs = i < 0 ? "" : s.Substring(i+1);
int idx = filename.LastIndexOf('.');
if (idx >= 0)
filename = filename.Substring(0,idx);
要获取没有扩展名的路径,请使用
System.IO.Path.GetFileNameWithoutExtension(fileName)
要获取扩展名(包括点),请使用以下命令
Path.GetExtension(fileName)
编辑:
不幸的是,GetFileNameWithoutExtension会剥离掉前面的路径,所以您可以使用以下方法:
if (path == null)
{
return null;
}
int length = path.LastIndexOf('.');
if (length == -1)
{
return path;
}
return path.Substring(0, length);
我觉得你真正想要的是 Path.GetFileNameWithoutExtension 方法 (System.IO),但只是为了好玩:
string input = "foo.bar.foobar";
int lastDotPosition = input.LastIndexOf('.');
if (lastDotPosition == -1)
{
Console.WriteLine("No dot found");
}
else if (lastDotPosition == input.Length - 1)
{
Console.WriteLine("Last dot found at the very end");
}
else
{
string firstPart = input.Substring(0, lastDotPosition);
string lastPart = input.Substring(lastDotPosition + 1);
Console.WriteLine(firstPart);
Console.WriteLine(lastPart);
}
使用LastIndexOf方法如何呢?它能够返回一个字符最后出现的位置。然后你可以使用Substring来提取你想要的。