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

时间:2017-04-21 16:49:11

标签: c# arrays char

我有下一个问题。例如,如果我有下一个CharArray: {!(!A&& A)(!A&& A)} 这里的问题是我要删除所有'!'在'A'旁边并添加'!'在最初的CharArray中没有它的'A'。所以问题的最终结果必须是: {!(A&& A)(A& A)}

我试图用它来删除'!':     // Regla是包含{!(!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++;
                    }`

但此刻要加一个'!'我有很多问题,因为计数器'i'改变了,我使用了像:

`var tRegla = new StringBuilder(Regla);
 tRegla.Insert(i - 1, "!");
 Regla = tRegla.ToString();
 cont1++;}`

我认为有更好的方法可以解决它。谢谢。

1 个答案:

答案 0 :(得分:4)

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

Regla.Replace("A", "!A").Replace("!!A", "A");

它会将A字母的所有实例替换为!A,因此!AA代替!!A!A。然后它只用!!A替换所有A,这应该与原始版本完全相反。

要使用任何大写字母进行此操作,您需要使用Regex.Replace代替。

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);
    }
}

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