-1

例如一个字符串包含以下内容(字符串是可变的):

http://www.google.comhttp://www.google.com

在这里删除重复 url 的最有效方法是什么 - 例如输出将是:

http://www.google.com 
4

4 回答 4

2

我假设输入只包含网址。

string input = "http://www.google.comhttp://www.google.com";

// this will get you distinct URLs but without "http://" at the beginning
IEnumerable<string> distinctAddresses = input
   .Split(new[] {"http://"}, StringSplitOptions.RemoveEmptyEntries)
   .Distinct();

StringBuilder output = new StringBuilder();
foreach (string distinctAddress in distinctAddresses)
{
   // when building the output, insert "http://" before each address so 
   // that it resembles the original
   output.Append("http://");
   output.Append(distinctAddress);
}

Console.WriteLine(output);
于 2012-07-01T17:39:47.230 回答
1

将字符串收集到列表中并使用不同的,如果您的字符串有http地址,您可以应用正则http:.+?(?=((http:)|($))表达式RegexOptions.SingleLine

var distinctList = list.Distinct(StringComparer.CurrentCultureIgnoreCase).ToList();
于 2012-07-01T17:29:16.927 回答
1

效率有各种定义:代码大小、总执行时间、CPU 使用率、空间使用率、编写代码的时间等。如果你想“高效”,你应该知道你正在尝试其中的哪一个。

我会做这样的事情:

string url = "http://www.google.comhttp://www.google.com";
if (url.Length % 2 == 0)
{
    string secondHalf = url.Substring(url.Length / 2);
    if (url.StartsWith(secondHalf))
    {
        url = secondHalf;
    }
}

根据您需要删除的重复项的种类,这可能适合您,也可能不适合您。

于 2012-07-01T17:29:44.433 回答
0

鉴于您不知道字符串的长度,您不知道某些东西是否是双倍的,您也不知道什么是双倍的:

string yourprimarystring = "http://www.google.comhttp://www.google.com";
int firstCharacter;
string temp;
for(int i = 0; i <= yourprimarystring.length; i++)
{
  for(int j = 0; j <= yourprimarystring.length; j++)
  {
    string search = yourprimarystring.substring(i,j);
    firstCharacter = yourprimaryString.IndexOf(search);
    if(firstCharacter != -1)
    {
      temp = yourprimarystring.substring(0,firstCharacter) + yourprimarystring.substring(firstCharacter + j - i,yourprimarystring.length)
      yourprimarystring = temp;
    }
}

这将遍历您的所有元素,从第一个字母到最后一个字母全部取出并像这样搜索它们:

ABCDA - 搜索 A 发现 A 排除 A,这就是问题所在,如果要使其可变,您需要指定重复需要多长时间,但也许我的代码可以帮助您。

于 2012-07-01T17:47:04.230 回答