使用c#解析URL中的字符串值

时间:2010-07-28 22:52:06

标签: c#

我有一个字符串“http://site1/site2/site3”。我想从字符串中获取“site2”的值。获得价值的C#中最好的algorythm是什么? (没有正则表达式因为它需要很快)。我还需要确保它不会抛出任何错误(只返回null)。

我在想这样的事情:

        currentURL = currentURL.ToLower().Replace("http://", "");

        int idx1 = currentURL.IndexOf("/");
        int idx2 = currentURL.IndexOf("/", idx1);

        string secondlevelSite = currentURL.Substring(idx1, idx2 - idx1);

4 个答案:

答案 0 :(得分:2)

假设currentURL是一个字符串

string result = new Uri(currentURL).Segments[1]
result = result.Substring(0, result.Length - 1);

需要子字符串,因为Segments [1]返回“site2 /”而不是“site2”

答案 1 :(得分:1)

你的榜样应该足够快。如果我们真的想要挑剔,那么不要做初始替换,因为那将至少是O(n)操作。做一个

int idx1 = currentURL.IndexOf("/", 8 /* or something */);

代替。

因此,您有两个以最佳方式优化的O(n)索引查找,以及两个O(1)操作,可能在.NET的Substring(...)实现中使用memcopy ...您可以托管代码的速度要快得多。

答案 2 :(得分:0)

currentURL = currentURL.ToLower()。替换(“http://”,“”);

var arrayOfString = String.spilt(currentUrl.spit('/');

答案 3 :(得分:0)

我的假设是你只需要第二级。如果没有第二级,那么它只会返回空值。

    string secondLevel = string.Empty;

    try
    {
        string currentURL = "http://stackoverflow.com/questionsdgsgfgsgsfgdsggsg/3358184/parse-string-value-from-a-url-using-c".Replace("http://", string.Empty);
        int secondLevelStartIndex = currentURL.IndexOf("/", currentURL.IndexOf("/", 0)) + 1;
        secondLevel = currentURL.Substring(secondLevelStartIndex, (currentURL.IndexOf("/", secondLevelStartIndex) - secondLevelStartIndex));
    }
    catch
    {
        secondLevel = string.Empty;
    }