使用.replace替换C#中的多个字符而不创建循环

时间:2017-03-01 01:40:43

标签: c#

我需要使用.replace替换C#中的多个字符而不创建循环,从而导致循环中最终字符的最终字符串

示例代码:

string t1="ABCD";
t1.Replace('A','B').Replace('B','C').Replace('C','D').Replace('D','E');

结果: EEEE

预期结果: BCDE

如何获得预期的结果,我对字符串中的大量字符执行此操作< = 100所以我需要一个简单的方法。我可以使用替换方法吗?还是有其他方法吗?

5 个答案:

答案 0 :(得分:2)

在这个特定示例中,如果您只是颠倒Replace(...)调用的顺序,它应该可以工作。

string t1="ABCD";
t1.Replace('D','E').Replace('C','D').Replace('B','C').Replace('A','B');

答案 1 :(得分:1)

如果您不想自己编写,可能最简单的编码方法是使用正则表达式:

Regex.Replace(mystring, "[ABCD]", s =>
{
    switch (s)
    {
        case "A": return "B";
        case "B": return "C";
        case "C": return "D";
        case "D": return "E";
        default: return s;
    }
});

答案 2 :(得分:1)

这可能会为你做到这一点

string t1 = "ABCD";
var ans = string.Join("", t1.Select(x => x = (char) ((int) x + 1)));

此代码将提供字符串的下一个字符。但是字母表的最后一个字符zZ的情况将会失败。失败意味着它不会是aA而是会提供{[。但大多数情况下,这可用于获取字符串中的下一个字符。

答案 3 :(得分:0)

在回答之前让我描述一下你的情况出了什么问题,实际上,替换操作会返回一个新的字符串实例,所以在第一次替换之后(t1.Replace('A','B')生成的字符串变为BBCDA替换为B,并且您正在此字符串中执行下一个替换操作,因此每个B都将替换为C。所以在最后更换输入字符串之前变为DDDD

我有一个使用LINQ和String.Join的简单解决方案,你可以看一下这里的working example

string inputString = "ABCD";
var ReplacedString = String.Join("", inputString.Select(x => x == 'A' ? 'B' : 
                                                    x == 'B' ? 'C' :
                                                    x == 'C' ? 'D' : 
                                                    x == 'D' ? 'E' : 
                                                    x));

答案 4 :(得分:0)

已发布的答案将解决您提供的直接示例,但您也要说必须为字符串中的大量字符执行此操作。我可能误解了你的要求,但听起来你只是试图“增加”每个字母。也就是说,A变为BI变为J等。

如果是这种情况,循环(不确定为什么要避免循环;它们似乎是最好的选项)将比将一堆替换串起来要好得多,尤其是对于更长的字符串。

以下代码假设您的唯一输入是大写拉丁字母,而对于字母Z,我刚刚包装了字母,因此它将替换为A

string t1 = "ABCDEFGXYZ";
StringBuilder sb = new StringBuilder();
foreach (char character in t1)
{
    if (character == 'Z')
    {
        sb.Append('A');
    }
    else
    {
        sb.Append((Char)(Convert.ToUInt16(character) + 1));
    }
}

Console.WriteLine(sb.ToString());

以下代码采用输入ABCDEFGXYZ并输出BCDEFGHYZA。这也可以扩展到更大的输入。