【问题标题】:How to remove duplicates from a string? [closed]如何从字符串中删除重复项? [关闭]
【发布时间】:2019-04-23 01:46:04
【问题描述】:

该代码应该将所有字母变成小写并将 j 更改为 i,它确实如此。但我正在尝试删除所有重复的字母。

示例输入字符串 = jjjaaaMMM 预期输出字符串 = jam

实际发生的实际输出字符串 = 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);
        }

【问题讨论】:

  • 您对jjjaaaMMMjjj 的预期行为是什么? jaMjaMj?
  • 你可以接受“maj”吗?据我所知,由于哈希集不能保证顺序......
  • 如果您对所需的输出更具体,我们可以再次打开此问题

标签: c# string duplicates character


【解决方案1】:

你的问题完全是= in

Secret.Text = Char.ToString(c);

必须是+=

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

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

但是你可以只使用 linq

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

或者从@Ben Voigt cmets 可能更有效

由于您有一个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

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

【讨论】:

  • 因为你有一个char的序列,所以调用字符串构造函数可能比Concat更有效。
  • @BenVoigt 好点,感谢更新和归因
【解决方案2】:

其他人可以直接回答问题。我会提供一个替代方案。与字符串操作一样,有一个Regex

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

【讨论】:

    【解决方案3】:

    您可以使用 Linq 方法:

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

    别忘了加using System.Linq

    【讨论】:

    • 这样,var text 将是 char[] 而不是 string
    • 是的,这是真的。 string text = new string(key.ToLower().Distinct().ToArray());它更适用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2014-04-03
    • 1970-01-01
    相关资源
    最近更新 更多