如何交换字符串中的字符

你会告诉我这很容易,我知道,但是如何将所有A同时更改为B,将所有B同时更改为A,字符串为s。

s= s.Replace( 'A', 'B').Replace( 'B', 'A'); 

显然不太有用,那么正确的方法是什么?

您可以使用linq替换字符:

 string s = "ABZBA"; var result= s.Select(x=> x == 'A' ? 'B' : (x=='B' ? 'A' : x)).ToArray(); s = new String(result); 

输出:

BAZAB

使用Regex.ReplaceMatchEvaluator来完成这项工作。 如果AB变得更复杂,这将处理比单个字符更长的字符串:

 s = Regex.Replace(s, "A|B", (m) => m.Value == "A" ? "B" : "A"); 

将字符串复制到StringBuilder并逐个字符地进行替换是实现此目的的一种方法:

 var s = new StringBuilder(originalString); for (int i = 0 ; i != s.Length ; i++) { var ch = s.Characters[i]; if (ch == 'A') { s.Characters[i] = 'B'; } else if (ch == 'B') { s.Characters[i] = 'A'; } } originalString = s.ToString(); 

如果你想使用Replace ,并且你的字符串中确实存在一个字符,你可以像使用临时变量进行交换一样:

 s= s.Replace( 'A', '~').Replace( 'B', 'A').Replace( '~', 'B'); 

以上假设~原始字符串中不存在~

你可以试试这个:

 string s = "ABABAB"; char placeholder = '~'; //After this s is BABABA s = s.Replace('A', placeholder).Replace('B', 'A').Replace(placeholder, 'B'); 

您的问题的解决方案可能是这样的:

  string s = "AABB"; var dict = new Dictionary {{'A', 'B'}, {'B', 'A'}}; s = new string(s.Select(c => dict.ContainsKey(c) ? dict[c] : c).ToArray()); 

这样您就可以替换所需的所有字符,只需将键/值对添加到字典中即可

通过s的字符迭代,如果你找到A put B (反之亦然)。

 StringBuilder newString = new StringBuilder(s.Length); foreach(var ch in s) { if (ch == 'A') newString.Append('B'); else if (ch == 'B') newString.Append('A'); else newString.Append(ch); } s = newString.ToString(); 

我最终得到了这个扩展方法:

 string Swap( this string s, char a, char b, char unused) { return s.Replace( a, unused).Replace( b, a).Replace( unused, b); } 

然后我改为:

 string Swap( this string s, char a, char b) { return new string( s.Select( ch => (ch == a) ? b :(ch == b) ? a : ch).ToArray()); }