2017-04-21 38 views
1

我有下一個問題。如果我有,例如,未來CharArray:{!(!一& & A)(!一個& & A)} '!' 這裏的問題是,我想刪除所有那就是'A'旁邊並添加'!'到在最初的CharArray中沒有它的'A'。所以,這個問題的最終結果必須是: 如何在C#中的CharArray中刪除和添加元素?

我試圖用它來刪除{(A & &!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++; 
        }` 

但此刻添加一個 '!'我有很多的問題,因爲反「我」發生變化,我用sompething這樣的:

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

我認爲這是一個更好的辦法來解決這個問題。謝謝。

+1

代替數組,可以使用'List '。然後,您可以插入或刪除,而無需連續重建所有內容。 –

+0

不要使用for循環,而是使用while循環來自己增加索引。這樣你就可以在插入或刪除'!'後調整索引。 –

回答

4

你必須使用一個字符數組來做到這一點嗎?在我看來,你可能只是這樣做,而不是:

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()刪除字符串中的任何!!。這將適用於任何大寫字母。如果需要與其他模式一起使用,只需修改正則表達式即可。

+0

其實我可以使用任何字母,所以它可以是A到Z,我需要檢測該字母是否有'!'在它的左邊(例如!!或!Z)。如果有,程序會將字符串更改爲A或Z(不帶'!')。如果字符串只有一個字母,它會添加一個'!'在那封信的左邊。 – Plapa

+0

如果是這種情況,你需要它更復雜一點。我會在我的答案中添加代碼來解釋這種情況。 – Redit0

+0

非常感謝! – Plapa

相關問題