C#替换字符串中的不同字符

时间:2016-05-18 17:55:12

标签: c# replace

每个人都知道如何用以下字符替换字符串中的字符:

string text = "Hello World!";
text = text.Replace("H","J");

但我需要的是替换字符串中的多个字符 类似的东西:

string text = textBox1.Text;
text = text.Replace("a","b")
text = text.Replace("b","a")

现在结果是aa,但如果用户输入ab,我希望结果为ba

4 个答案:

答案 0 :(得分:3)

有多种方法可以做到这一点。

使用循环

char[] temp = input.ToCharArray();
for (int index = 0; index < temp.Length; index++)
    switch (temp[index])
    {
        case 'a':
            temp[index] = 'b';
            break;
        case 'b':
            temp[index] = 'a';
            break;
    }
string output = new string(temp);

这将简单地将字符串复制到字符数组,自行修复每个字符,然后将数组转换回字符串。不会让任何角色与任何其他角色混淆。

使用正则表达式

您可以利用this overload of Regex.Replace

public static string Replace(
    string input,
    string pattern,
    MatchEvaluator evaluator
)

这将获取将为每个匹配调用的委托,并返回最终结果。代表负责返回每个匹配应替换的内容。

string output = Regex.Replace(input, ".", ma =>
{
    if (ma.Value == "a")
        return "b";
    if (ma.Value == "b")
        return "a";
    return ma.Value;
});

答案 1 :(得分:0)

当您在这样的循环中连接多个字符串时,使用StringBuilder,所以我建议使用以下解决方案:

StringBuilder sb = new StringBuilder(text.Length);

foreach(char c in text)
{
   sb.Append(c == 'a' ? 'b' : 'a');
}

var result = sb.ToString();

答案 2 :(得分:0)

不要为同一个字符串多次调用String.Replace!它每次都会创建一个新字符串(每次都必须循环遍历整个字符串),如果大量使用,会导致内存压力和处理器时间浪费。

你能做什么:

创建一个与输入字符串长度相同的新char数组。迭代输入字符串的所有字符。对于每个字符,检查是否应该替换它。如果应该替换它,请将替换写入先前创建的char数组,否则将原始char写入该数组。然后使用该char数组创建一个新字符串。

string inputString = "aabbccdd";
char[] chars = new char[inputString.Length];

for (int i = 0; i < inputString.Length; i++)
{
    if (inputString[i] == 'a')
    {
        chars[i] = 'b';
    }
    else if (inputString[i] == 'b')
    {
        chars[i] = 'a';
    }
    else
    {
        chars[i] = inputString[i];
    }
}

string outputString = new string(chars);

当打算替换很多不同的角色时,请考虑使用switch

答案 3 :(得分:0)

根据您的特殊要求,我建议您使用以下内容:

String[] token = line.split(" "); // create string of tokens
if (token.length >= 3) {
    list.add(new Node(token[0], token[1], Integer.parseInt(token[2])));
}

此特定输入的输出字符串为string input = "abcba"; string outPut=String.Join("",input.ToCharArray() .Select(x=> x=='a'? x='b': (x=='b'?x='a':x)) .ToArray());