如何将给定字符串中所有字符的实例加倍.使用c#

本文关键字:实例 字符 使用 字符串 | 更新日期: 2023-09-27 17:53:27

例如,将字符串" ABCXYZ "中的所有'X'的实例都翻倍,将变成" ABCXXYZ "

我想用这种方法解决:

  1. 将字符串复制到char数组
  2. 遍历整个数组并找出'X'在字符串
  3. 中出现的次数
  4. 查找出现次数为#的新长度* 2
  5. 迭代字符数组,并在每次出现'X'时存储'X'两次
  6. 将字符数组复制回字符串

在c#中是否有有效的方法来做到这一点,请建议一个

谢谢

如何将给定字符串中所有字符的实例加倍.使用c#

Replace方法可以这样做:

"ABCXYZ".Replace("X","XX")

如果事先不知道是哪个字符,可以使用string构造函数:

string s = "ABCXYZ";
char c = 'X';
s = s.Replace(new string(c,1),new string(c,2))

好的,根据您的新要求不使用现成的字符串方法,如何:

var sbOut = new StringBuilder();
string myString = "ABCXYZ";
foreach (char c in myString) {
    sbOut.Append(c);
    if (c == 'X') {
        sbOut.Append(c);
    }
}
Console.WriteLine(sbOut.ToString());

字符串。Replace会给你正确的字符串,我想,但是它不会给你替换的数目。为了更有效地做到这一点,可以这样做:

char[] chars = string.ToCharArray();
char[] destchars = new char[chars.Length * 2]; // Max possible string size
int xidx = 0;
// Replace the X's
for(int i = 0; i < chars.Length; ++i)
{
   if(chars[i] == 'X')
   {
      destchars[xidx] = destchars[xidx + 1] = chars[i];
      xidx += 2;
   }
   else
      destchars[xidx++] = chars[i];
}
int numberOfXs = (xidx - chars.Length);
string newstr = new string(destchars, xidx);

我手工输入了这个,没有运行它或调试它,但是你明白了。除了副本之外,双倍大小的缓冲区可能会占用一些内存。

只是为了好玩,因为你说你不想使用内置的字符串方法来做这件事,我写了一个扩展方法。我不知道这到底有多有效率。这应该是相当有效的,但我不能保证。

public static class StringExt
{
    public static IEnumerable<char> DoubleChar(this IEnumerable<char> inString,
                                               char dupChar)
        {
         foreach (char c in inString)
         {
            yield return c;
            if (c == dupChar)
            {
                yield return c;
            }
         }
    }
}

你可以这样使用它:

string x = new string("ABCXYZ".DoubleChar('X').ToArray());

这也允许你将调用链接在一起,而不必做多个字符串副本。所以你可以这样做:

string x = new string("ABCXYZ".DoubleChar('X').DoubleChar('Y').ToArray());