C# 如何在C中删除和添加字符中的元素?

C# 如何在C中删除和添加字符中的元素?,c#,arrays,char,C#,Arrays,Char,我有下一个问题。例如,如果我有下一个字符: {!!A&&A!A&&A!A} 这里的问题是我想删除所有的'!'在“A”旁边加上“!”到初始字符中没有的“A”。因此,这个问题的最终结果必须是: {!A&&!A&&A} 我已尝试使用此选项删除“!”: //Regla是包含{!!A&&A!A&&A!A}的字符串 `char[] array = Regla.ToCharArray(); for (int i = 0; i < array.Length; i++)

我有下一个问题。例如,如果我有下一个字符: {!!A&&A!A&&A!A} 这里的问题是我想删除所有的'!'在“A”旁边加上“!”到初始字符中没有的“A”。因此,这个问题的最终结果必须是: {!A&&!A&&A}

我已尝试使用此选项删除“!”: //Regla是包含{!!A&&A!A&&A!A}的字符串

`char[] array = Regla.ToCharArray();
            for (int i = 0; i < array.Length; i++)
            {
                char c = array[i];
                if (c == idL1 && array[i - 1] == '!')
                {
                    if (cont1 == 0 && cont2 == 0)
                    {
                        var tRegla = new StringBuilder(Regla);
                        tRegla.Remove(i - 1, 1);
                        Regla = tRegla.ToString();
                        cont1++;
                    }
                    if (cont1 == 1 && cont2 == 1)
                    {
                        var tRegla = new StringBuilder(Regla);
                        tRegla.Remove(i - 2, 1);
                        Regla = tRegla.ToString();
                        cont1++;
                    }
                    if (cont1 == 2 && cont2 == 2)
                    {
                        var tRegla = new StringBuilder(Regla);
                        tRegla.Remove(i - 3, 1);
                        Regla = tRegla.ToString();
                        cont1++;
                    }
                    if (cont1 == 3 && cont2 == 3)
                    {
                        var tRegla = new StringBuilder(Regla);
                        tRegla.Remove(i - 4, 1);
                        Regla = tRegla.ToString();
                        cont1++;
                    }
                        cont2++;
                    }`

我认为有更好的办法来解决这个问题。谢谢。

您必须使用字符数组来执行此操作吗?在我看来,你可以这样做:

Regla.Replace("A", "!A").Replace("!!A", "A");
它将字母A的所有实例替换为!A、 所以,与其说!A和A你有!!A和!A.那么它将取代所有!!A只带A,它应该与原始的完全相反

若要使用任何大写字母,则需要使用Regex.Replace


这有点复杂。。。正则表达式将字母放入,使其成为捕获组。然后替换位添加了一个!到$1,表示捕获组中匹配字符的实例。然后对.Replace的调用将删除任何!!在字符串中。这将适用于任何大写字母。如果需要处理其他模式,只需修改正则表达式。

是否必须使用字符数组来完成此操作?在我看来,你可以这样做:

Regla.Replace("A", "!A").Replace("!!A", "A");
它将字母A的所有实例替换为!A、 所以,与其说!A和A你有!!A和!A.那么它将取代所有!!A只带A,它应该与原始的完全相反

若要使用任何大写字母,则需要使用Regex.Replace


这有点复杂。。。正则表达式将字母放入,使其成为捕获组。然后替换位添加了一个!到$1,表示捕获组中匹配字符的实例。然后对.Replace的调用将删除任何!!在字符串中。这将适用于任何大写字母。如果需要使用其他模式,只需修改正则表达式。

使用列表而不是数组。然后,您可以插入或删除,而无需不断重建所有内容。不要使用for循环,而是使用while循环,您可以自己增加索引。这样,您可以在插入或删除后调整索引!使用列表代替数组。然后,您可以插入或删除,而无需不断重建所有内容。不要使用for循环,而是使用while循环,您可以自己增加索引。这样,您可以在插入或删除后调整索引!实际上我可以使用任何字母,所以它可以是A到Z,我需要检测这个字母是否有“!”在它的左边!A或!Z、 比如说。如果有,程序会将字符串更改为o Z,而不带“!”。如果字符串只有一个字母,它将添加一个“!”在那封信的左边。如果是这样的话,你需要更复杂一点。我将在我的答案中添加代码来解释这种情况。非常感谢!实际上我可以使用任何字母,所以它可以是A到Z,我需要检测这个字母是否有“!”在它的左边!A或!Z、 比如说。如果有,程序会将字符串更改为o Z,而不带“!”。如果字符串只有一个字母,它将添加一个“!”在那封信的左边。如果是这样的话,你需要更复杂一点。我将在我的答案中添加代码来解释这种情况。非常感谢!
using System;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
        var Regla = "{!( !A && A) ( !A && !A )}";

        var output = Regex.Replace(Regla, "([A-Z])", "!$1").Replace("!!", "");

        Console.WriteLine(output);
    }
}