替换字符串字符

时间:2014-02-28 10:38:17

标签: .net string replace

我有一个字符串

"#1#+#2#+#3#*1.23+#4#/2+#5#"

我有一个对象列表

  • 1,“ABC”
  • 2,“DEF”
  • 3,“GHI”
  • 4,“JKL”
  • 5,“MNO”

我需要一个新的String,其中#1#替换为“ABC”,#2#替换为DEF等。

所需的字符串:

"ABC+DEF+GHI*1.23+JKL/2+MNO"

如何有效执行替换?

编辑:目前我在列表中循环For Each并使用Replace作为字符串,但我相信它的内存效率不高。必须有更好的方法。

3 个答案:

答案 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)

两个答案:

  1. 简单的一个。对列表中的每个对象使用string.Replace(...)方法。但是对于有很多替换的长字符串来说会很慢。
  2. 创建StringBuilder。通过字符串复制字符迭代到stringbuilder,直到遇到替换子字符串。在StringBuilder中插入重放对象并继续迭代输入字符串。返回StringBuilder.ToString()