在C#中组合重叠的URL

时间:2010-03-30 16:49:13

标签: c#

我有两个网址。我想要组合的服务器和相对URL。问题是网址的一部分可能会重叠。我已经使用一些可怕的字符串操作完成了这个,但是想把它放在那里,看看是否有一个很好的干净方法。

string siteUrl = "http://seed-dev6/sites/irs";
string formUrl = "/sites/irs/Forms/testform.xsn";

4 个答案:

答案 0 :(得分:3)

我会根据路径分隔符/拆分网址,在保留顺序的同时合并列表而不重复,然后将它们连接成一个网址字符串。

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

答案 1 :(得分:2)

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;

你必须为C#写自己的,但这(以及文章)将是一个良好的开端。

答案 2 :(得分:0)

    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;

答案 3 :(得分:0)

这应该可以解决问题。可能还使用Path.DirectorySeparatorChar而不是'/'。

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