0

我确实需要一个有效的 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”,它不应该加载其余值。

4

5 回答 5

1

您的代码从一个语句下降到其他语句 - 所以首先将 a 替换为 6b,然后将 6b 的 b 替换为 7c,依此类推。

所以,在你的具体情况下,你可以改变你的陈述的顺序,这样后面的陈述就不会对前面的陈述做出反应——比如

builder.Replace("c", "8d");

builder.Replace("b", "7c");

builder.Replace("a", "6b");

于 2011-02-23T08:53:22.990 回答
1

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

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

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

这在任何情况下都有效。

于 2011-02-23T09:26:19.103 回答
0

您需要更改替换的顺序:

StringBuilder builder = new StringBuilder();
builder.Replace("c", "8d");
builder.Replace("b", "7c");
builder.Replace("a", "6b");
return builder.ToString();
于 2011-02-23T08:49:58.333 回答
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();
}
于 2011-02-23T09:31:35.770 回答
0

您可以在字母后面使用空格。如在“a”中用“a”替换“a”为所需文本。

于 2011-02-23T09:33:58.610 回答