在C中删除字符串中的重复子字符串#

问题描述:

如何删除字符串中的重复子字符串?所以例如,如果我有一个像smith:rodgers:someone:smith:white这样的字符串,那么我怎样才能得到一个新的字符串,其中额外的smithsmith:rodgers:someone:white一样被删除。我也想保留冒号,尽管它们是重复的。在C中删除字符串中的重复子字符串#

千恩万谢

+0

你的意思你想保留已删除的字符串冒号? – Mark 2010-08-27 16:14:28

string input = "smith:rodgers:someone:smith:white"; 
string output = string.Join(":", input.Split(':').Distinct().ToArray()); 

当然这个代码假定你只会看到重复的“场”的值。在下面的字符串,不会删除“smithsmith”:

"smith:rodgers:someone:smithsmith:white" 

这将有可能写一个算法来做到这一点,但很难使其有效...

+2

不要忘记,如果您使用.NET4,则可以省略“ToArray”调用。 – LukeH 2010-08-27 16:12:56

+0

@LukeH:你为什么不需要'ToArray()'调用? – Odrade 2010-08-27 17:25:47

+2

@Orade:在.Net 4中,string.Join被重载以接受'IEnumerable '。在.net 3.5及更早的版本中,事实并非如此。请参阅http://msdn.microsoft.com/en-us/library/system.string.join.aspx。 – Brian 2010-08-27 17:32:18

假设字符串格式:

var theString = "smith:rodgers:someone:smith:white"; 
var subStrings = theString.Split(new char[] { ':' }); 
var uniqueEntries = new List<string>(); 

foreach(var item in subStrings) 
{ 
    if (!uniqueEntries.Contains(item)) 
    { 
     uniqueEntries.Add(item); 
    } 
} 

var uniquifiedStringBuilder = new StringBuilder(); 
foreach(var item in uniqueEntries) 
{ 
    uniquifiedStringBuilder.AppendFormat("{0}:", item); 
} 

var uniqueString = uniquifiedStringBuilder.ToString().Substring(0, uniquifiedStringBuilder.Length - 1); 

比较啰嗦,表示的是从过程中一个到另一个获得。

事情是这样的:

string withoutDuplicates = String.Join(":", myString.Split(':').Distinct().ToArray()); 
+0

不能记住String.Join()方法,就像我尝试记住它一样。您不需要ToArray()上的。 – 2010-08-27 16:12:23

+0

您不需要ToArray()上的类型参数,但是不需要点选。 – Mark 2010-08-27 16:12:47

+0

你是对的。纠正。 :) – CalebD 2010-08-27 16:14:07

不知道你为什么想保留重复的冒号。如果你期望的输出是“smith:rodgers:someone::white”试试这个代码:

public static string RemoveDuplicates(string input) 
    { 
     string output = string.Empty; 
     System.Collections.Specialized.StringCollection unique = new System.Collections.Specialized.StringCollection(); 
     string[] parts = input.Split(':'); 
     foreach (string part in parts) 
     { 
      output += ":"; 
      if (!unique.Contains(part)) 
      { 
       unique.Add(part); 
       output += part; 
      } 
     } 
     output = output.Substring(1); 
     return output; 
    } 

ofcourse我还没有检查空的输入,但我敢肯定,日子会把你做到这一点;)