一次获取一个子串的所有实例?

时间:2012-02-04 09:19:38

标签: c# .net string

如果我有一个包含三个0值的字符串,我将如何逐个抓取它们以替换它们?

0可以位于字符串中的任何位置。

我不想使用正则表达式。

要解析的示例字符串:

String myString = "hello 0 goodbye 0 clowns are cool 0"; 

现在我只能找到三个0值,如果它们彼此相邻的话。我用stringToParse.Replace("0", "whatever value i want to replace it with");

替换它们

我希望能够用不同的值替换每个0实例...

5 个答案:

答案 0 :(得分:4)

您可以执行this

之类的操作
var strings = myString.Split('0');
var replaced = new StringBuilder(strings[0]);

for (var i = 1; i < strings.Length; ++i)
{
    replaced.Append("REPLACED " + i.ToString());
    replaced.Append(strings[i]);
}

答案 1 :(得分:2)

伪郎:

s = "yes 0 ok 0 and 0"
arr = s.split(" 0")
newstring = arr[0] + replace1  + arr[1] + replace2 + arr[2] + replace3

答案 2 :(得分:1)

如果您控制了这些输入字符串,那么我将使用复合格式字符串:

string myString = "hello {0} goodbye {1} clowns are cool {2}";
string replaced = string.Format(myString, "replace0", "replace1", "replace2");

答案 3 :(得分:1)

使用LINQ和泛型函数来解耦替换逻辑。

var replace = (index) => {
                    // put any custom logic here
                    return (char) index;
                 };

string input = "hello 0 goodbye 0 clowns are cool 0";       
string output = new string(input.Select((c, i) => c == '0' ? replace(i) : c)
                                .ToArray());

优点:

  • 字符串替换逻辑与字符串处理(实际上是LINQ查询)分离

缺点:

  • 不是绩效观点的最佳解决方案

答案 4 :(得分:1)

public string ReplaceOne(string full, string match, string replace)
{
    int firstMatch = full.indexOf(match);
    if(firstMatch < 0)
    {
        return full;
    }
    string left;
    string right;
    if(firstMatch == 0)
        left = "";
    else
        left = full.substring(0,firstMatch);
    if(firstMatch + match.length >= full.length)
        right = "";
    else
        right = full.substring(firstMatch+match.length);
    return left + replace + right 
}

如果您的匹配可以在替换中进行,那么您将需要跟踪您的upto索引并将其传递给indexOf。