如何删除字符串中的重复子字符串?所以,例如,如果我有一个像smith:rodgers:someone:smith:white
这样的字符串,那么我怎样才能获得一个新的字符串,其中删除了额外的smith
,如smith:rodgers:someone:white
。我也想保留冒号,即使它们是重复的。
答案 0 :(得分:21)
string input = "smith:rodgers:someone:smith:white";
string output = string.Join(":", input.Split(':').Distinct().ToArray());
当然,此代码假设您只查找重复的“字段”值。这不会删除以下字符串中的“smithsmith”:
"smith:rodgers:someone:smithsmith:white"
有可能编写一个算法来做到这一点,但很难使它高效...
答案 1 :(得分:8)
这样的事情:
string withoutDuplicates = String.Join(":", myString.Split(':').Distinct().ToArray());
答案 2 :(得分:2)
假设该字符串的格式:
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);
相当啰嗦,但显示了从一个到另一个的过程。
答案 3 :(得分:0)
不确定为什么要保留重复的冒号。如果您希望输出为“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;
}
当然我没有检查空输入,但我相信你会这样做;)