C#使用Substring,如何提取此字符串?

时间:2009-01-13 15:03:42

标签: c# substring

我想在下面的URL中提取第一个文件夹,在此示例中,它被称为“extractThisFolderName”,但该文件夹可以具有任何名称并且可以是任意长度。考虑到这一点,我如何使用substring来提取第一个文件夹名称?

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

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

这是我正在努力的长度。

7 个答案:

答案 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]