2013-03-17 2 views
3

문자 교체를위한이 간단한 코드가 있습니다. 제가 추가하고자하는 것은, 즉, 문자 A를 문자 T로 대체하면 모든 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

+1

문자열 바꾸기 try letter1 = this.textBox2.Text; char를 사용하여 letter1 = this.textBox2.Text [0]; . letter2와 동일합니다. – alex

+0

그 트릭을했다 :) 대단히 감사합니다 – cvenko

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