如何将给定字符串中所有字符的实例加倍.使用c#
本文关键字:实例 字符 使用 字符串 | 更新日期: 2023-09-27 17:53:27
例如,将字符串" ABCXYZ "中的所有'X'的实例都翻倍,将变成" ABCXXYZ "
我想用这种方法解决:
- 将字符串复制到char数组
- 遍历整个数组并找出'X'在字符串 中出现的次数
- 查找出现次数为#的新长度* 2
- 迭代字符数组,并在每次出现'X'时存储'X'两次
- 将字符数组复制回字符串
在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());