2017-04-21 2 views
1

私は次の質問があります。私が持っている場合は、次のCharArray例えば:{!(!!& & A)(!& & A)} '!' ここでの問題は、私はすべて削除したいということですそれは 'A'の隣にあり、 '!'最初のCharArrayでそれを持たない 'A'に移動します。だから、問題の最終的な結果がする必要があります。 私は削除するためにこれを使用しようとしたC#でCharArrayの要素を削除して追加する方法は?

{(& & 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++; 
        }` 

しかし、現時点では

を追加するには、 'を!'私はそれを解決するためのより良い方法があると思い

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

:カウンタが「i」は、変更をして、私は同じようsompethingを使用するので、私は、問題がたくさんあります。ありがとうございました。

+1

配列の代わりに、リストを使用してください。その後、すべてを継続的に再構築することなく、挿入または削除を行うことができます。 –

+0

forループは使用しないで、インデックスを自分自身でインクリメントするwhileループを使用してください。あなたは '! 'を挿入または削除した後にインデックスを調整することができます。 –

答えて

4

これを行うには、char配列を使用する必要がありますか?あなただけの代わりにこれを行うことが私には思える:

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

それはあなたが!!A!Aを持って!Aと手紙Aのすべてのインスタンスを置き換え、その代わりに!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()を呼び出すと、文字列内の!!が削除されます。これは任意の大文字で動作します。他のパターンを扱う必要がある場合は、正規表現を変更するだけです。

+0

実際には任意の文字を使うことができますので、AからZにすることができます。その左側(例えば、!Aまたは!Z)。それがあれば、プログラムは文字列をA o Zに変更します( '!'なし)。文字列に文字だけがある場合は、 '!'が追加されます。その手紙の左に。 – Plapa

+0

そのような場合は、もう少し複雑にする必要があります。私は答えの中でこのケースを説明するコードを追加します。 – Redit0

+0

ありがとう! – Plapa

関連する問題