2013-03-17 188 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 )); 
相关问题