C#替换每个替换+不同的数字

时间:2014-09-15 15:44:32

标签: c# string replace numbers

我正在努力取代每一个" "用" - [[RANDOMNUMBER和textbox1 Text]]" 但是,如何为每次替换选择一个新号码? 所以它并不总是241848等。 谢谢!

Random random = new Random();
string replacing = " --[["+random.Next()+textBox1.Text+"]] ";
string output = richTextBox1.Text.Replace(" ", replacing);

5 个答案:

答案 0 :(得分:6)

请改用Regex.Replace(String, String, MatchEvaluator)。它需要MatchEvaluator回调函数,您可以在其中提取下一个随机数:

Random random = new Random();
string output = Regex.Replace(richTextBox1.Text, " ", (match) => 
    string.Format(" --[[{0}{1}]] ", random.Next(), textBox1.Text));

例如:

Random random = new Random();
string output = Regex.Replace("this is a test", " ", (match) => 
    string.Format(" --[[{0}{1}]] ", random.Next(), "sample"));

上面的示例输出:

  

this --[[1283057197sample]] is --[[689040621sample]] a --[[1778328590sample]] test

答案 1 :(得分:2)

这是使用String.Split和Linq Aggregate的解决方案。

string source = "This is a test string with multiple spaces";
string replaceText = "TextToReplace";
string template = " --[[{0}{1}]] ";
System.Random rand = new System.Random();

var splitString = source.Split(' ');
var result = splitString.Aggregate((a,b) => a + String.Format(template, rand.Next().ToString(), replaceText) + b);

答案 2 :(得分:1)

您不必使用Replace,而是必须自己使用IndexOf进行替换,每次使用新的随机数。伪代码:

var index = str.IndexOf(' ');

while (index != -1)
{
    str = str.Substring(0, index) + rand.Next() + str.Substring(index + 1, str.Length - index - 1);
    index = str.IndexOf(' ');
}

我没有对此进行测试,因此您可能需要检查+1或-1实际上是按顺序排列的,并且这可以更好地实现。但这就是想法。

答案 3 :(得分:0)

你的问题是Random只被调用一次,因为Replace接受字符串参数。一个快速而肮脏的解决方案

        const string str = "string with lot of spaces";
        var newStr = new StringBuilder();
        foreach (var charc in str.ToCharArray())
        {
            if (charc.Equals(' '))
            {
                var random = new Random();
                var yourReplacementString = " --[[" + random.Next() + "textBox1.Text" + "]] ";
                newStr.Append(yourReplacementString);
            }
            else
            {
                newStr.Append(charc);
            }
        }

答案 4 :(得分:0)

考虑使用StringBuilder来避免许多字符串初始化

var builder = new StringBuilder();

        var stingParts = richTextBox1.Text.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

        for (int i = 0; i < stingParts.Length; i++)
        {
            builder.Append(stingParts[i]);
            builder.Append(string.Format(" --[[{0}{1}]] ", random.Next(), textBox1.Text)));
        }

        var output = builder.ToString();