我有兩個網址。我想要合併的服務器和相關網址。問題是部分網址可能會重疊。我已經使用了一些可怕的字符串操作來完成這個工作,但是想把它放在那裏,看看是否有一個乾淨利落的方法。在C中結合重疊的網址#
string siteUrl = "http://seed-dev6/sites/irs";
string formUrl = "/sites/irs/Forms/testform.xsn";
我有兩個網址。我想要合併的服務器和相關網址。問題是部分網址可能會重疊。我已經使用了一些可怕的字符串操作來完成這個工作,但是想把它放在那裏,看看是否有一個乾淨利落的方法。在C中結合重疊的網址#
string siteUrl = "http://seed-dev6/sites/irs";
string formUrl = "/sites/irs/Forms/testform.xsn";
我會分裂根據他們的路徑分隔符/
的URL,合併名單沒有重複,同時維持秩序,然後將它們連接成一個單一的URL字符串。
這可以避免瘋狂的字符串操作和搜索你需要做的。唯一複雜的因素是使得代碼能夠處理不同的情況(高與低)以及網絡轉義碼%20等。
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#,但是這(與文章一起)將是一個良好的開端。
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;
這應該可以做到。也可能使用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());
我已經走了你的方法,它不是完美的,但它足夠滿足我需要的東西,並且實現起來更快。 – 2010-03-31 16:16:00