我想在一对重复的字母之间添加一个“ X”,例如,如果它是“ SSM”,我希望它是“ SX”和“ SM”,这就是我所做的,但是它没有添加“ X”,我该如何解决? len是“ SSM”
for (int i = 0; i < len.Length - 1; i++)
{
if (len[i] == len[i + 1])
{
Nlen += 'X';
}
}
Stringbuilders将要求我在代码中进行很多更改,如何在不使用stringbuilders的情况下解决它们?
答案 0 :(得分:1)
这是一种简单的方法:
var chars = input.ToList();
for (var index = input.Length - 1; index > 0; index--)
{
if (chars[index] == chars[index - 1])
chars.Insert(index, 'X');
}
return new string(chars.ToArray());
SSM => SXSM
SSSM => SXSXSM
答案 1 :(得分:0)
我没有VS编辑器,但与此类似:
char lastChar = '';
StringBuilder sb = new StringBuilder();
foreach(char c in len)
{
if (c == lastChar) { sb.Append('X') }
sb.Append(c);
lastChar = c;
}
return sb.ToString();
答案 2 :(得分:0)
这将为您提供SXSM,从您的问题中我不确定您是否希望将它们成对分组,即(SX,SM)还是只插入X。
string len = "SSM";
StringBuilder Nlen = new StringBuilder();
for (int i = 0; i < len.Length; i++)
{
if ((i+1) < len.Length && len[i] == len[i + 1])
{
Nlen.Append(len[i]);
Nlen.Append('X');
}
else
{
Nlen.Append(len[i]);
}
}
答案 3 :(得分:0)
看起来Nlen
并未考虑数组中的当前字符:
Nlen += len[i] + ‘X’
答案 4 :(得分:0)
您可以使用正则表达式替换
var len = "SSM";
var replaced = Regex.Replace(len, @"([a-z,A-Z])\1", @"$1X$1");
Console.WriteLine(replaced);
在这种情况下,输出为“ SXSM”
正则表达式说明
([a-z,A-Z])
与任何字符a-z或A-Z匹配并存储在捕获组1中\1
返回捕获组1的引用。如果上一个匹配项是“ S”,则要使其完全匹配,下一个字符将必须是“ S” $1X$1
替换字符串。将捕获组1像我们的示例中的字母“ S”一样,并在两个S之间插入一个“ X”