2013-03-17 231 views
3

我有這個簡單的代碼字母替換。我想補充的是,如果我用字母T替換字母A,那麼所有的T字母也會自動替換爲A.所以,如果我有一個單詞「atatatat」,下面的代碼將該單詞更改爲「tttttttt」,但它應該將其更改爲「tatatata」。我怎樣才能解決這個問題?字符串中的字母替換

private void button3_Click(object sender, EventArgs e) 
{ 
    String key= this.textBox1.Text; 
    String letter1 = this.textBox2.Text; 
    String letter2 = this.textBox3.Text; 

    StringBuilder newKey = new StringBuilder(); 
    newKey.AppendLine(key); 
    newKey.Replace(letter1, letter2); 
    this.textBox4.Text = noviKljuc.ToString(); 
} 

我試圖加入這一行:newKey.Replace(letter2, letter1);但這種改變字爲「AAAAAAAA」

回答

5

只是通過信件進行迭代,並改變它們一一:

foreach(char c in key){  
    if(c==letter1){ 
     newKey.Append(letter2); 
    }else if(c==letter2){ 
     newKey.Append(letter1); 
    }else{ 
     newKey.Append(c); 
    } 
} 
+0

嘗試過,但它返回同一個詞作爲開始提供的一個。不知道如何。 – cvenko 2013-03-17 19:30:46

+1

嘗試替換字符串letter1 = this.textBox2.Text;用char 1 = this.textBox2.Text [0]; 。 letter2也一樣。 – alex 2013-03-17 19:32:22

+0

這樣做的技巧:)非常感謝你 – cvenko 2013-03-17 19:38:22

1

您需要遍歷每個字母,檢測是否繼續進行更改,然後僅在發生第一次更換時進行第二次更換:

// Check to see if we can find the 1st char to replace in the string 
bool doReplace = key.Any(c => c == originalChar); 

if (doReplace) 
{ 
    foreach (char c in key) 
    { 
     if (c == originalChar) 
     { 
      newKey.Append(alternateChar); 
     } 
     else if (c == alternateChar) 
     { 
      newKey.Append(originalChar); 
     } 
     else 
     { 
      newKey.Append(c); 
     } 
    } 
} 
else 
{ 
    newKey = key; 
} 

this.textBox4.Text = newKey.ToString(); 
0

試試這個

var result = String.Join("", 
    key.Select(c => c == letter2 ? letter1 : c == letter1 ? letter2 : c )); 
相關問題