代码之家  ›  专栏  ›  技术社区  ›  Daniel Revell

在C中合并重叠的URL#

c#
  •  3
  • Daniel Revell  · 技术社区  · 16 年前

    string siteUrl = "http://seed-dev6/sites/irs";
    string formUrl = "/sites/irs/Forms/testform.xsn";
    
    4 回复  |  直到 16 年前
        1
  •  3
  •   LBushkin    16 年前

    我会根据路径分隔符来分割url / ,合并没有重复项的列表,同时保持顺序,然后将它们连接到单个URL字符串中。

    这避免了您需要执行的疯狂的字符串操作和搜索。唯一复杂的因素是使代码能够处理不同的情况(大写和小写),以及web转义代码%20等等。

        2
  •  2
  •   Justin Ethier    16 年前

    这本书 Knuth-Morris-Pratt 算法讨论了一种寻找两个单词重叠的算法。事实上,它们甚至提供了一种算法:

    overlap[0] = -1;
    for (int i = 0; pattern[i] != '\0'; i++) {
    overlap[i + 1] = overlap[i] + 1;
    while (overlap[i + 1] > 0 &&
           pattern[i] != pattern[overlap[i + 1] - 1])
        overlap[i + 1] = overlap[overlap[i + 1] - 1] + 1;
    }
    return overlap;
    

        3
  •  0
  •   egrunin    16 年前
        string siteUrl = "http://seed-dev6/sites/irs";
        string formUrl = "/sites/irs/Forms/testform.xsn";
    
        string result = siteUrl + formUrl;
        for (int n = 1; n < formUrl.Length; ++n)
        {
            if (siteUrl.EndsWith(formUrl.Substring(0, n)))
                result = siteUrl + formUrl.Substring(n);
        }
    
        return result;
    
        4
  •  0
  •   juharr    16 年前

    这应该能奏效。也可以使用Path.directorysepartorchar而不是“/”。

    char delim = '/';
    string siteUrl = "http://seed-dev6/sites/irs";
    string formUrl = "/sites/irs/Forms/testform.xsn";
    string fullUrl = string.Join(
        new string(delim,1), 
        siteUrl.Split(delim).Concat(formUrl.Split(delim)).Distinct().ToArray());