windows - udskift den 2. kamp hoppe 1. kamp i C #

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en streng, der har 2 lignende ord. Jeg vil erstatte 2 sekunders ord, men ikke den første

Bedste reference


Du kunne bruge regulære udtryk og en lookbehind.


var replaceHello = "ABC hello 123 hello 456 hello 789";
var fixedUp = Regex.Replace(replaceHello, "(?<=hello.*)hello", "goodbye"); 


Dette erstatter alle forekomster af ordet 'hej' med 'farvel', bortset fra den første.

Andre referencer 1


Regex -versionen er kortfattet, men hvis du ikke er i stand til at bruge et regulært udtryk, kan du overveje noget mere kode tungt.


Klassen StringBuilder giver en måde at erstatte inden for en given substreng. I denne udvidelsesmetode på string specificerer vi en substring, der starter ved afslutningen af ​​den første gældende kamp. Nogle grundlæggende validering mod argumenter er på plads, men jeg kan ikke sige, at jeg har testet alle kombinationer.


public static string SkipReplace(this string input, string oldValue, string newValue)
{
    if (input == null)
        throw new ArgumentNullException("input");

    if (string.IsNullOrEmpty(oldValue))
        throw new ArgumentException("oldValue");

    if (newValue == null)
        throw new ArgumentNullException("newValue");

    int index = input.IndexOf(oldValue);

    if (index > -1)
    {
        int startingPoint = index + oldValue.Length;
        int count = input.Length - startingPoint;
        StringBuilder builder = new StringBuilder(input);
        builder.Replace(oldValue, newValue, startingPoint, count);

        return builder.ToString();
    }

    return input;
}


Brug den:


string foobar = "foofoo".SkipReplace("foo", "bar");