在C#的最后一个点上打破字符串的最佳方法

时间:2009-07-06 09:15:05

标签: c# string

在最后一个点的位置将字符串分成两个字符串的最佳方式和惯用方法是什么?基本上将扩展名与文件路径或URL中的路径的其余部分分开。到目前为止,我正在做的是Split(“。”)然后是String.Join(“。”)除了最后一部分之外的一切。听起来像用火箭筒杀死苍蝇。

9 个答案:

答案 0 :(得分:24)

如果你想要表现,比如:

    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);

答案 1 :(得分:5)

您可以使用 Path.GetFilenameWithoutExtension()

或者如果这对您不起作用:

int idx = filename.LastIndexOf('.');

if (idx >= 0)
   filename = filename.Substring(0,idx);

答案 2 :(得分:2)

要获取不带扩展名的路径,请使用

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);

答案 3 :(得分:1)

字符串方法LastIndexOf可能对你有用。

但Path或FileInfo运算符更适合基于文件名的操作。

答案 4 :(得分:1)

Path.GetExtension()可以帮到你。

答案 5 :(得分:1)

使用返回字符最后找到位置的LastIndexOf方法怎么样?然后你可以使用Substring来提取你想要的东西。

答案 6 :(得分:1)

如果字符串中存在点,则String.LastIndexOf将返回点的位置。然后,您可以使用String.Substring方法来拆分字符串。

答案 7 :(得分:1)

您可以使用字符串方法

LastIndexOf和substring来完成任务。

答案 8 :(得分:0)

我认为你真正想要的是Path.GetFileNameWithoutExtension Method (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);
}