我有一个字符串
"#1#+#2#+#3#*1.23+#4#/2+#5#"
我有一个对象列表
我需要一个新的String,其中#1#替换为“ABC”,#2#替换为DEF等。
所需的字符串:
"ABC+DEF+GHI*1.23+JKL/2+MNO"
如何有效执行替换?
编辑:目前我在列表中循环For Each并使用Replace作为字符串,但我相信它的内存效率不高。必须有更好的方法。
答案 0 :(得分:1)
如果性能不是一个大问题,您可能需要使用正则表达式:
string input = "#1#+#2#+#3#*1.23+#4#/2+#5#";
var replaces = new List<string> { "ABC", "DEF", "GHI", "JKL", "MNO" };
string result = Regex.Replace(input, "#[0-9]+#", match =>
{
string number = match.Value.Substring(1, match.Value.Length - 2);
int index = int.Parse(number) - 1;
return replaces[index];
});
即使是'#'之间的数字:
也能正常工作'#'之间的数字N必须对应replaces
列表中的第(N-1)个索引。
您可能想要添加一些错误处理。
答案 1 :(得分:0)
从数据库中读取此行。阅读它并更改#为{或}。如果是第一个#,那么{,如果是第二个},依此类推。然后结果将类似于下面的文本变量;)
string text = "{0}+{1}+{2}*1.23+{3}/2+{4}";
你有一个数组:
string[] replaces = {"ABC",
"DEF",
"GHI",
"JKL",
"MNO"};
你可以这样做:
string result = string.Format(text, replaces);
答案 2 :(得分:-1)
两个答案:
string.Replace(...)
方法。但是对于有很多替换的长字符串来说会很慢。StringBuilder.ToString()
。