【问题标题】:C# Using Substring, how do I extract this string?C# 使用子字符串,我如何提取这个字符串?
【发布时间】:2009-01-13 15:03:41
【问题描述】:

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

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

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

这是我正在努力解决的长度。

【问题讨论】:

    标签: c# substring


    【解决方案1】:

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

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

    【讨论】:

    • 如果您要使用多个字符串的一部分,这只是一个糟糕的选择。否则,扫描前两个斜杠会明显更快,而忽略字符串的其余部分。
    【解决方案2】:

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

    String[] parts = path.Split('/');
    

    此时您可以通过访问部件[1]来访问“extractThisFolderName”部件。

    或者,您可以这样做来拼接出文件夹名称:

    int firstSlashIndex = path.IndexOf('/');
    int secondSlashIndex = path.IndexOf('/', firstSlashIndex + 1);
    String folderName = path.Substring(firstSlashIndex + 1, secondSlashIndex - firstSlashIndex);
    

    【讨论】:

      【解决方案3】:

      Daniel 的回答为您提供了其他实用的方法。使用子字符串的另一种选择:

      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);
      

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

      【讨论】:

      • 乔恩,如果没有尾随斜杠,这有一个错误。
      • 试用斜线?我的意思是第二个斜线。
      • 这就是“你当然要在其中添加一些错误检查”的地方 - 检查 -1 作为对 IndexOf 的两次调用的返回(这将使 start=0当然)。
      【解决方案4】:

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

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

      对发生的事情很清楚,您可以通过这些名称获取数据。

      【讨论】:

        【解决方案5】:
        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。

        【讨论】:

        • 同意。虽然这不是问题。
        【解决方案6】:

        你可以这样做:

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

        【讨论】:

          【解决方案7】:
          folderName.Split('/')[1]
          

          【讨论】:

            猜你喜欢
            • 2011-01-19
            • 2022-10-12
            • 1970-01-01
            • 2018-09-29
            • 2013-12-11
            • 1970-01-01
            • 2019-10-22
            • 2011-11-17
            • 1970-01-01
            相关资源
            最近更新 更多