我有两个网址。我想要组合的服务器和相对URL。问题是网址的一部分可能会重叠。我已经使用一些可怕的字符串操作完成了这个,但是想把它放在那里,看看是否有一个很好的干净方法。
string siteUrl = "http://seed-dev6/sites/irs";
string formUrl = "/sites/irs/Forms/testform.xsn";
答案 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());