我有这个字符串
AA的 B'/强> qqidjwljd的 P fjem
我需要将 b 替换为 b ,将 b 替换为 b
AA的 P qqidjwljd的 B'/强> fjem
我这样做的方式看起来像这个
myvar.replace("b","1").replace("p","b").replace("1","p")
这真是太丑了
有更好的方法吗?
修改
为什么难看?因为我必须决定/找到适用于任何可能情况的任意字符集答案 0 :(得分:7)
string sold = "aa**b**qqidjwljd**p**fjem";
string snew = Regex.Replace(sold, "(?<replace>b|p)", delegate(Match p)
{
switch (p.Groups["replace"].Value)
{
case "b": return "p";
case "p": return "b";
};
throw new ApplicationException("Should never happen!");
});
答案 1 :(得分:2)
我认为应该这样做,我认为它更具可读性
private static string Transpose(string s)
{
string output = "";
foreach (char c in s)
{
switch (c)
{
case 'P':
output += 'B';
break;
case 'B':
output += 'P';
break;
default:
output += c;
break;
}
}
return output;
}
虽然没有为开放封闭原则赢得任何奖品!
答案 2 :(得分:1)
这似乎也有用
var a = "aa**b**qqidjwljd**p**fjem";
a = new string((from n in a select (n == 'b' ? 'p' : (n == 'p' ? 'b' : n))).ToArray());
答案 3 :(得分:0)
我现在想不出更好的方法,你的方法真的不那么难看。
假设字符串中从不存在1,它应该可以正常工作。
答案 4 :(得分:0)
不。它与标准交换变量问题相同。 (为了交换A
和B
的值,您需要使用C
)。
答案 5 :(得分:0)
在周五下午我的想法很简洁。根据Replace在内部的作用,这可能会更快:
char [] myChars = "aa**b**qqidjwljd**p**fjem".ToCharArray();
for (int x = 0; x < myChars.Length; x++)
{
char currentCharacter = myChars[x];
if (currentCharacter == 'b')
{
myChars[x] = 'p';
}
else if (currentCharacter == 'p')
{
myChars[x] = 'b';
}
}
string myString = new string(myChars);
答案 6 :(得分:0)
你的方式很好。唯一的问题是如果字符串中有一个'1',因为它会导致你的逻辑被破坏。
更好的解决方案是使用您确定永远不会出现在文本中的临时字符,例如管道(“|”)或代字号(“〜”)。