我想在下面的URL中提取第一个文件夹,在此示例中,它被称为“extractThisFolderName”,但该文件夹可以具有任何名称并且可以是任意长度。考虑到这一点,我如何使用substring来提取第一个文件夹名称?
字符串:www.somewebsite.com/extractThisFolderName/leave/this/behind
String folderName = path.Substring(path.IndexOf(@"/"),XXXXXXXXXXX);
这是我正在努力的长度。
答案 0 :(得分:17)
如果你得到一个Uri,为什么不做uri.Segments [0]?
甚至path.Split(new Char[] { '/' })[1]
?
答案 1 :(得分:1)
如果您要使用每个路径部分,可以使用:
String[] parts = path.Split('/');
此时您可以通过访问部件[1]来访问“extractThisFolderName”部分。
或者,你可以这样做来拼出foldername:
int firstSlashIndex = path.IndexOf('/');
int secondSlashIndex = path.IndexOf('/', firstSlashIndex + 1);
String folderName = path.Substring(firstSlashIndex + 1, secondSlashIndex - firstSlashIndex);
答案 2 :(得分:1)
丹尼尔的回答为您提供了其他实用的方法。使用子字符串的另一种选择:
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);
你当然想在那里添加一些错误检查:)
答案 3 :(得分:1)
问题也适用于正则表达式。表达式如下:
(?<host>.*?)/(?<folder>.*?)/
明确发生了什么,你可以通过这些名字获取数据。
答案 4 :(得分:0)
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。
答案 5 :(得分:0)
你可以这样做:
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中完成的,如果是这样的话,我认为可能有另一种方法可以在不进行查询的情况下实现这一点。
答案 6 :(得分:0)
folderName.Split('/')[1]