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