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

时间:2010-08-27 16:04:18

标签: c#

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

非常感谢

4 个答案:

答案 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;
    }

当然我没有检查空输入,但我相信你会这样做;)