该代码应该将所有字母都转换为小写字母,然后将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);
}
答案 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实例,或String 一个或多个Object实例的值的表示形式。
从序列中返回不同的元素。
答案 1 :(得分:0)
其他人可以直接回答问题。我将提供替代方案。一如往常,对于字符串操作,有一个Regex。
var output = Regex.Replace(input, @"(.)\1*", "$1");
答案 2 :(得分:-2)
您可以使用Linq方法:
var text = key.ToLower().Distinct().ToArray();
别忘了添加using System.Linq