我正试图在我的子串起点中首次出现:
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 :(得分:14)
要回答您的实际问题 - 您可以使用string.IndexOf
来获得第一次出现的字符。请注意,您需要从LastIndexOf
调用中减去此值,因为Substring
的第二个参数是要获取的字符数,而不是开始和结束索引。
但是......您可以直接使用Path.GetFilenameWithoutExtension来获取文件名,而不是解析名称。
答案 1 :(得分:9)
首次出现
String.IndexOf('.')
上次出现
String.LastIndexOf('.')
答案 2 :(得分:6)
使用IndexOf
和LastIndexOf
字符串方法获取“搜索”字符串的第一次和最后一次出现的索引。您可以使用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
答案 3 :(得分:1)
file.IndexOf( “”)
应该让你第一次出现“。”。否则,如果没有找到它将返回-1。
答案 4 :(得分:0)
我认为在您的特定情况下,您不是要尝试使用IndexOf ...而是需要使用0,因为如果正确理解您正在尝试基于文件名创建密钥:
`ddlResources.Items.Add(new ListItem(file.Substring(0, file.LastIndexOf(".")), file ));`
此外,你在新的ListItem {...}中有'{}',这也会导致语法错误......无论如何看看..
答案 5 :(得分:0)
因为原始问题用[regex]标记标记,所以我将提供以下解决方案,但是使用.NET简单解析路径的最佳答案不是正则表达式。
//extracts "filename" from "filename.resx"
string name = Regex.Match("filename.resx", @"^(.*)\..+?$").Groups[1].Value;
为简单起见,请使用依赖于Path
类的答案。其他答案包含该信息。
答案 6 :(得分:0)
给你!)
使用字符串变量类型
int index = str.IndexOf(@"\");
“C:\Users\somebody\Desktop\aFolder\someFile”