在C中删除字符串中的重复子字符串#
问题描述:
如何删除字符串中的重复子字符串?所以例如,如果我有一个像smith:rodgers:someone:smith:white
这样的字符串,那么我怎样才能得到一个新的字符串,其中额外的smith
像smith:rodgers:someone:white
一样被删除。我也想保留冒号,尽管它们是重复的。在C中删除字符串中的重复子字符串#
千恩万谢
答
string input = "smith:rodgers:someone:smith:white";
string output = string.Join(":", input.Split(':').Distinct().ToArray());
当然这个代码假定你只会看到重复的“场”的值。在下面的字符串,不会删除“smithsmith”:
"smith:rodgers:someone:smithsmith:white"
这将有可能写一个算法来做到这一点,但很难使其有效...
答
假设字符串格式:
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);
比较啰嗦,表示的是从过程中一个到另一个获得。
答
不知道你为什么想保留重复的冒号。如果你期望的输出是“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我还没有检查空的输入,但我敢肯定,日子会把你做到这一点;)
你的意思你想保留已删除的字符串冒号? – Mark 2010-08-27 16:14:28