字符串中的字符替换

时间:2011-02-23 08:44:17

标签: c# asp.net string character-encoding character-replacement

我确实需要一个有效的ASP.NET C#代码来替换字符串中的字符。

我的下面的代码工作正常但是在输入“a”的情况下它给出了输出“678d”,但是在输入“c”的情况下输出是正确的,因为它是“8d”...这里它自动替换其余值。我可以看到代码正在逐步执行...这导致我得到一个重载输出。

{
    StringBuilder builder = new StringBuilder();
    builder.Replace("a", "6b");
    builder.Replace("b", "7c");
    builder.Replace("c", "8d");
    return builder.ToString();
}

现在,我确实需要将“a”替换为“6b”,并且不应加载其余值。

5 个答案:

答案 0 :(得分:1)

你的代码从一个陈述到其他陈述都在下降 - 所以首先用6b替换a,然后用7c替换6b的b,依此类推。

所以,在你的具体情况下,你可以改变你的陈述的顺序,以便后面的陈述不会对早先的陈述做出反应 - 比如

  

builder.Replace(“c”,“8d”);

     

builder.Replace(“b”,“7c”);

     

builder.Replace(“a”,“6b”);

答案 1 :(得分:1)

为了更加独立于实际替换,您可以进行双向替换:

首先使用不会出现在字符串中的占位符替换事件(例如%% 1 %%替换“a”,%% 2 %%替换“b”等。)

然后在第二次运行中,将%% 1 %%替换为“8d”,将%% 2 %%替换为“7c”等。

无论如何都会有效。

答案 2 :(得分:0)

您需要更改替换的顺序:

StringBuilder builder = new StringBuilder();
builder.Replace("c", "8d");
builder.Replace("b", "7c");
builder.Replace("a", "6b");
return builder.ToString();

答案 3 :(得分:0)

试试这个:

Regex rx = new Regex("a|b|c");

string str = "abc";

MatchEvaluator matcher = match => {
    string value = match.Value;
    if (value == "a") {
        return "6b";
    } else if (value == "b") {
        return "7c";
    } else {
        return "8d";
    }
};

var str2 = rx.Replace(str, matcher);

或者如果您不想使用正则表达式:

static void Main(string[] args)
{
    var replacements = new[] {
        new Tuple<string, string>("a", "6b"), 
        new Tuple<string, string>("b", "6c"), 
        new Tuple<string, string>("c", "6a")
    };

    string str = "adbc";
    var str2 = MultipleReplace(str, replacements);
}

static string MultipleReplace(string str, IEnumerable<Tuple<string, string>> replacements) {
    StringBuilder str2 = new StringBuilder();

    for (int i = 0; i < str.Length; i++) {
        bool found = false;

        foreach (var rep in replacements) {
            if (str.Length - i >= rep.Item1.Length && str.Substring(i, rep.Item1.Length) == rep.Item1) {
                str2.Append(rep.Item2);
                i += rep.Item1.Length - 1;
                found = true;
                break;
            }
        }

        if (!found) {
            str2.Append(str[i]);
        }
    }

    return str2.ToString();
}

答案 4 :(得分:0)

你可以在信件后面使用空格。如在带有“a”的“a”中,用所需文本替换“a”。