2011-12-28 85 views
6

我試着讓我的子串起始點第一次出現可以有人幫助我如何獲得一個字符中第一次出現的子串

string dir = Request.MapPath(Request.ApplicationPath) + "\\App_GlobalResources\\"; 

foreach (var file in Directory.EnumerateFiles(dir, "*.resx")) 
{ 
    ddlResources.Items.Add(new ListItem { Text = file.Substring(firstoccuranceof("."), file.LastIndexOf(".")), Value = file }); 
} 

,如果我做file.Substring(file.IndexOf(」。 「),file.LastIndexOf(」「)),我得到一個錯誤

+0

你能舉一個具體的例子,對於一個給定的字符串,你想得到什麼?例如:如果字符串是'「Hello_world.jpg」'應該是什麼結果? – 2011-12-28 02:37:55

+0

您有一個語法錯誤,即在新的ListItem {...}中使用'{''}'。另外,爲什麼要指定Text =和Value = ...他們什麼都不做,最後你可能是想得到沒有.resx擴展名的文件名,並且使用:file.Substring(0,fileLastIndexOf (「。」)) – 2011-12-28 02:50:32

回答

10

要回答您的實際問題 - 您可以使用string.IndexOf獲取首次出現的字符。請注意,您需要從LastIndexOf調用中減去此值,因爲Substring的第二個參數是要提取的字符數,而不是開始和結束索引。

但是...而不是解析名稱,你可以直接使用Path.GetFilenameWithoutExtension獲得文件名。

+0

你能告訴我你的意思嗎?因爲我試過這種方式file.substring(file.IndexOf(「。」),file.LastIndexOf(「。」)) – ONYX 2011-12-28 02:40:10

+0

@KDM你想達到什麼?你可能需要'file.Substring(file.IndexOf(「。」),file.LastIndexOf(「。」) - file.IndexOf(「。」))' - 但GetFilenameWithoutExtension可能會更好... – 2011-12-28 02:43:27

+0

+1不僅僅是說他們「應該這樣做」,而是爲了回答給定的問題_並且還提供了另一種方法 – elmer007 2016-03-03 16:15:34

5

第一次出現

String.IndexOf('.') 

最後一次出現

String.LastIndexOf('.') 
+0

我試過file.IndexOf(「。」)但我得到一個錯誤 – ONYX 2011-12-28 02:38:46

+0

什麼錯誤?我們是否可以知道實際看到你失敗了? – King 2011-12-28 02:40:04

6

使用IndexOfLastIndexOf字符串方法獲取「搜索」字符串的第一次和最後一次出現的索引。您可以使用System.IO.Path.GetExtension(),System.IO.Path.GetFileNameWithoutExtension()System.IO.Path.GetDirectoryName()方法來解析路徑。

例如,

string file = @"c:\csnet\info.sample.txt"; 
Console.WriteLine(System.IO.Path.GetDirectoryName(file));   //c:\csnet 
Console.WriteLine(System.IO.Path.GetFileName(file));    //info.sample.txt 
Console.WriteLine(System.IO.Path.GetFileNameWithoutExtension(file));//info.sample 
Console.WriteLine(System.IO.Path.GetExtension(file));    //.txt 
+1

我認爲這是他所需要的,以獲得沒有路徑和擴展名的文件名。 – 2011-12-28 02:41:28

+1

是的。他正在這樣做。他甚至可以使用拆分並獲取字符串而不是子字符串來完成此任務。這個答案最適合他的任務 – King 2011-12-28 02:48:29

0

我認爲你的具體情況,你是不是想獲得的IndexOf ......相反,你需要使用0,因爲你正在試圖創建一個基於文件名,如果瞭解的關鍵正確:

`ddlResources.Items.Add(new ListItem(file.Substring(0, file.LastIndexOf(".")), file));` 

而且,你在那裏有「{}」作爲新的ListItem {...}這也將導致一個語法錯誤......好歹看看..

1

file.IndexOf (「。」)

應該讓你第一次出現「。」。否則,如果找不到則返回-1。

0

由於原始問題用[regex]標記標記,我將提供以下解決方案,但是,使用.NET簡單解析路徑的最佳答案不是正則表達式。

//extracts "filename" from "filename.resx" 
string name = Regex.Match("filename.resx", @"^(.*)\..+?$").Groups[1].Value; 

爲簡單起見,請使用依賴於Path類的答案。其他答案包含該信息。

相關問題