我想提取下面 URL 中的第一个文件夹,在本例中它被称为“extractThisFolderName”,但该文件夹可以有任何名称和任何长度。考虑到这一点,我如何使用子字符串来提取第一个文件夹名称?
字符串:www.somewebsite.com/extractThisFolderName/leave/this/behind
String folderName = path.Substring(path.IndexOf(@"/"),XXXXXXXXXXX);
这是我正在努力的长度。
如果你得到一个 Uri,为什么不直接做 uri.Segments[0]?
甚至path.Split(new Char[] { '/' })[1]
?
这个问题也适用于正则表达式。像这样的表达式:
(?<host>.*?)/(?<folder>.*?)/
清楚发生了什么,您可以通过这些名称获取数据。
如果您要使用每个路径部分,您可以使用:
String[] parts = path.Split('/');
此时您可以通过访问parts[1] 来访问“extractThisFolderName”部分。
或者,您可以这样做来拼接出文件夹名称:
int firstSlashIndex = path.IndexOf('/');
int secondSlashIndex = path.IndexOf('/', firstSlashIndex + 1);
String folderName = path.Substring(firstSlashIndex + 1, secondSlashIndex - firstSlashIndex);
丹尼尔的回答为您提供了其他实用的方法。使用子字符串的另一种选择:
int start = path.IndexOf('/')+1; // Note that you don't need a verbatim string literal
int secondSlash = path.IndexOf('/', start);
return path.Substring(start, secondSlash-start);
当然,您需要在其中添加一些错误检查:)
int start = path.IndexOf('/');
int end = path.IndexOf('/', start + 1);
if (end == -1) end = path.Length;
string folderName = path.Substring(start + 1, end - start - 1);
编辑:Daniel Schaffer 的关于使用 uri 段的回答更可取,但将其保留,因为它可能是您的路径不是真正有效的 uri。
你可以这样做:
string myStr = "www.somewebsite.com/extractThisFolderName/leave/this/behind";
int startIndex = myStr.IndexOf('/') + 1;
int length = myStr.IndexOf('/', startIndex) - startIndex;
Console.WriteLine(myStr.Substring(startIndex, length));
同时,我假设这是在 ASP.Net 中完成的,如果是这样的话,我认为可能有另一种方法可以在不进行查询的情况下获得它。
folderName.Split('/')[1]