Ich muss das erste (und NUR das erste) Vorkommen einer Zeichenfolge aus einer anderen Zeichenfolge entfernen.
Hier ist ein Beispiel, das die Zeichenfolge ersetzt "\\Iteration"
. Dies:
Projektname \\ Iteration \\ Release1 \\ Iteration1
würde dies werden:
Projektname \\ Release1 \\ Iteration1
Hier ein Code, der dies tut:
const string removeString = "\\Iteration";
int index = sourceString.IndexOf(removeString);
int length = removeString.Length;
String startOfString = sourceString.Substring(0, index);
String endOfString = sourceString.Substring(index + length);
String cleanPath = startOfString + endOfString;
Das scheint viel Code zu sein.
Meine Frage lautet also: Gibt es eine sauberere / lesbarere / präzisere Möglichkeit, dies zu tun?
æ
undae
gelten als gleich. Der Versuch,paedia
aus zu entfernenEncyclopædia
, wirft einArgumentOutOfRangeException
, da Sie versuchen, 6 Zeichen zu entfernen, wenn der passende Teilstring nur 5 enthält.sourceString.IndexOf(removeString, StringComparison.Ordinal)
um die Ausnahme zu vermeiden.EDIT: @OregonGhost ist richtig. Ich selbst würde das Skript mit Bedingungen aufteilen, um auf ein solches Vorkommen zu prüfen, aber ich ging davon aus, dass die Zeichenfolgen aufgrund einer bestimmten Anforderung zueinander gehören sollten. Es ist möglich, dass von Unternehmen geforderte Regeln für die Ausnahmebehandlung diese Möglichkeit nutzen. Ich selbst würde ein paar zusätzliche Zeilen verwenden, um bedingte Überprüfungen durchzuführen und es für Junior-Entwickler, die sich möglicherweise nicht die Zeit nehmen, es gründlich genug zu lesen, ein wenig lesbarer zu machen.
quelle
quelle
Schrieb dafür einen schnellen TDD-Test
rgx.Replace (Eingabe, "", 1); sagt, in der Eingabe nach etwas zu suchen, das dem Muster entspricht, mit "", 1 Mal.
quelle
Sie könnten zum Spaß eine Erweiterungsmethode verwenden . Normalerweise empfehle ich nicht, Erweiterungsmethoden an eine solche Allzweckklasse wie string anzuhängen, aber wie gesagt, das macht Spaß. Ich habe mir @ Lukes Antwort geliehen, da es keinen Sinn macht, das Rad neu zu erfinden.
quelle
IsValidIBAN(this string input)
wäre es zu spezifisch, um es in einer Zeichenfolge zu haben.Wenn Sie eine einfache Methode zur Lösung dieses Problems wünschen. (Kann als Erweiterung verwendet werden)
Siehe unten:
Verwendung:
Inspiriert von und modifiziert die Antwort von @ LukeH und @ Mike.
Vergessen Sie nicht StringComparison.Ordinal, um Probleme mit den Kultureinstellungen zu vermeiden. https://www.jetbrains.com/help/resharper/2018.2/StringIndexOfIsCultureSpecific.1.html
quelle
Ich stimme definitiv zu, dass dies perfekt für eine Erweiterungsmethode ist, aber ich denke, dass es ein bisschen verbessert werden kann.
Dies macht ein bisschen Rekursion, was immer Spaß macht.
Hier ist auch ein einfacher Unit-Test:
quelle