如何交换字符串中的字符
你会告诉我这很容易,我知道,但是如何将所有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.Replace
和MatchEvaluator
来完成这项工作。 如果A
和B
变得更复杂,这将处理比单个字符更长的字符串:
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()); }