如何从字符串中删除重复项?

时间:2019-04-23 01:46:05

标签: c# string duplicates character

该代码应该将所有字母都转换为小写字母,然后将j更改为i。但是我想取出所有重复的字母。

示例输入的字符串= jjjaaaMMM预期的输出字符串=卡纸

实际发生的情况是实际输出字符串= m,请帮助我不确定我缺少的内容。

                    string key = Secret.Text;
        var keyLow = key.ToLower();
        var newKey = keyLow.Replace("j", "i");
        var set = new HashSet<char>(newKey);
        foreach (char c in set)
        {
            Secret.Text = Char.ToString(c);
        }

3 个答案:

答案 0 :(得分:4)

您的问题完全是{p}中的=

Secret.Text = Char.ToString(c);

它必须为+=

Secret.Text += Char.ToString(c);

您正在用下一个值覆盖每个值。

但是您可以只使用 linq

Secret.Text = string.Concat(key.ToLower().Replace("j", "i").Distinct());

或者可能更有效地来自@Ben Voigt条评论

  

由于您有一个char序列,所以它可能更有效   调用string 构造函数而不是Concat

Secret.Text = new string(set.ToArray());

// or 

Secret.Text = new string(key.ToLower()
                            .Replace("j", "i")
                            .Distinct()
                            .ToArray());

其他资源

String.Concat Method

  

连接一个或多个String实例,或String   一个或多个Object实例的值的表示形式。

Enumerable.Distinct Method

  

从序列中返回不同的元素。

答案 1 :(得分:0)

其他人可以直接回答问题。我将提供替代方案。一如往常,对于字符串操作,有一个Regex

var output = Regex.Replace(input, @"(.)\1*", "$1");

答案 2 :(得分:-2)

您可以使用Linq方法:

var text = key.ToLower().Distinct().ToArray();  

别忘了添加using System.Linq