2009-07-06 23 views
8

在最後一個點的位置將字符串拆分爲兩個字符的最佳方式和習慣用法是什麼?基本上將擴展名與文件路徑或URL中路徑的其餘部分分開。到目前爲止,我正在做的是拆分(「。」),然後是String.Join(「。」),除了最後一部分。聽起來像使用火箭筒殺死蒼蠅。C上最後一個點打破字符串的最佳方式#

回答

22

如果你想表現,喜歡的東西:

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

你可以使用Path.GetFilenameWithoutExtension()

,或者不會爲你工作:

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

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

這將工作的URL的片斷(使用/而不是\\)?它也會返回「文件夾」? Path.GetFilename()只返回文件的名稱,不包含目錄AFAIK。 – Pablo 2009-07-06 09:18:40

+0

如果OP僅詢問了文件路徑,則該值爲+1。但是System.IO.Path文檔沒有提到對URL的支持。 – OregonGhost 2009-07-06 09:19:19

1

的字符串的方法可能的LastIndexOf這裏一些對你有用。

但是Path或FileInfo操作符將更適合基於文件名的操作。

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

怎麼樣使用LastIndexOf方法返回一個字符的最後發現位置。然後你可以使用Substring來提取你想要的東西。

1

如果String.LastIndexOf存在於字符串中,它將返回點的位置。然後你可以使用String.Substring方法來分割字符串。

1

您可以使用字符串的方法

LastIndexOf和子到acomplish任務。

相關問題