3

我想提取下面 URL 中的第一个文件夹,在本例中它被称为“extractThisFolderName”,但该文件夹可以有任何名称和任何长度。考虑到这一点,我如何使用子字符串来提取第一个文件夹名称?

字符串:www.somewebsite.com/extractThisFolderName/leave/this/behind

String folderName = path.Substring(path.IndexOf(@"/"),XXXXXXXXXXX);

这是我正在努力的长度。

4

7 回答 7

18

如果你得到一个 Uri,为什么不直接做 uri.Segments[0]?

甚至path.Split(new Char[] { '/' })[1]

于 2009-01-13T15:06:34.983 回答
1

这个问题也适用于正则表达式。像这样的表达式:

(?<host>.*?)/(?<folder>.*?)/

清楚发生了什么,您可以通过这些名称获取数据。

于 2009-01-13T15:49:52.697 回答
1

如果您要使用每个路径部分,您可以使用:

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);
于 2009-01-13T15:08:47.117 回答
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);

当然,您需要在其中添加一些错误检查:)

于 2009-01-13T15:09:08.300 回答
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。

于 2009-01-13T15:08:17.630 回答
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 中完成的,如果是这样的话,我认为可能有另一种方法可以在不进行查询的情况下获得它。

于 2009-01-13T15:08:59.033 回答
0
folderName.Split('/')[1]
于 2009-01-13T15:09:21.997 回答