用升序替换所有出现的子字符串

本文关键字:字符串 升序 替换 | 更新日期: 2023-09-27 18:22:11

我正在想办法用升序替换子字符串的所有出现。

如果我们说我想替换的子字符串是"foo",而整个字符串是"bar foo foo bar bar foo bar",那么最后的字符串将是"bar 0 1 bar bar 2 bar"

我在谷歌上搜索了这个问题的解决方案,但没有找到答案。我能找到的最接近的方法是用一个特定的字符串替换所有出现的子字符串。

用升序替换所有出现的子字符串

实现这一点的一种方法是使用Regex.Replace和内联MatchEvaluator,后者返回并后递增计数器:

var str = "bar foo foo bar bar foo bar";
var r = new Regex("foo");
var c = 0;
var replacedString = r.Replace(str, m => (c++).ToString());
    // = bar 0 1 bar bar 2 bar

您也可以这样做:

        string input = "bar foo foo bar bar foo bar";
        string output = string.Empty;
        var words = input.Split(' ');
        int numberOfOccurencies = 0;
        for (int i = 0; i < words.Count(); i++)
        {
            if (words[i] == "foo")
            {
                words[i] = numberOfOccurencies.ToString();
                numberOfOccurencies++;
            }
        }
        output = string.Join(" ", words);

我认为这更容易理解。