我要告诉我这很简单,但我如何同时将所有A变为B,将所有B变为A,变为字符串,s。
s= s.Replace( 'A', 'B').Replace( 'B', 'A');
显然不是很有效,所以正确的方法是什么?
答案 0 :(得分:6)
您可以使用linq替换字符:
string s = "ABZBA";
var result= s.Select(x=> x == 'A' ? 'B' : (x=='B' ? 'A' : x)).ToArray();
s = new String(result);
BAZAB
答案 1 :(得分:4)
使用Regex.Replace
和MatchEvaluator
来完成这项工作。如果A
和B
变得更加复杂,这将处理超过单个字符的字符串:
s = Regex.Replace(s, "A|B", (m) => m.Value == "A" ? "B" : "A");
答案 2 :(得分:3)
将字符串复制到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');
以上假设原始字符串中不存在~
。
答案 3 :(得分:2)
迭代s
的字符,如果您发现A
放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();
答案 4 :(得分:2)
你可以试试这个:
string s = "ABABAB";
char placeholder = '~';
//After this s is BABABA
s = s.Replace('A', placeholder).Replace('B', 'A').Replace(placeholder, 'B');
答案 5 :(得分:2)
解决问题的方法可能是:
string s = "AABB";
var dict = new Dictionary<char, char> {{'A', 'B'}, {'B', 'A'}};
s = new string(s.Select(c => dict.ContainsKey(c) ? dict[c] : c).ToArray());
这样您可以替换所需的所有字符,只需将键/值对添加到字典
即可答案 6 :(得分:2)
我最终得到了这种扩展方法:
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());
}