Ich denke, das lässt uns für eine String.ReplaceFirst
Funktion suchen. Da es keinen gibt, können wir einfach diese Funktion schreiben. Dann wird der Code, der es erfordert wird viel besser lesbar, weil es schnell klar ist, was es (aus dem Namen der Funktion.) Tut
Public Function ReplaceFirst(searched As String, target As String, replacement As String) As String
'This input validation is just for completeness.
'It's not strictly necessary.
'If the searched string is "null", throw an exception.
If (searched Is Nothing) Then Throw New ArgumentNullException("searched")
'If the target string is "null", throw an exception.
If (target Is Nothing) Then Throw New ArgumentNullException("target")
'If the searched string doesn't contain the target string at all
'then just return it - were done.
Dim foundIndex As Integer = searched.IndexOf(target)
If (foundIndex = -1) Then Return searched
'Build a new string that replaces the target with the replacement.
Return String.Concat(searched.Substring(0, foundIndex), replacement, _
searched.Substring(foundIndex + target.Length, searched.Length - (foundIndex + target.Length)))
End Function
Beachten Sie, wie wenn Sie den Code unten zu lesen, Sie haben nicht einmal ausgeben müssen einen Moment, um herauszufinden, was es macht. Es ist lesbar. Während die Eingabezeichenfolge "A" enthält, ersetzen Sie das erste "A" durch "Bb".
Dim input as string = "AAA"
While input.IndexOf("A") > -1
input = input.ReplaceFirst(input,"A","Bb")
'If you need to capture individual values of "input" as it changes
'add them to a list.
End While
Sie könnten die Funktion optimieren oder vollständig ersetzen. Was zählt ist, dass Ihr Code lesbar ist, kann jemand sagen, was es tut, und die ReplaceFirst
Funktion ist testbar.
Dann lassen Sie uns sagen, dass Sie eine andere Funktion wollte, dass Sie alle „Versionen“ des Eingabestring gab als der Zielstring ersetzt:
Public Function GetIterativeReplacements(searched As String, target As String, replacement As String) As List(of string)
Dim output As New List(Of String)
While searched.IndexOf(target) > -1
searched = ReplaceFirst(searched, target, replacement)
output.Add(searched)
End While
Return output
End Function
Wenn Sie
rufen
dim output as List(of string) = GetIterativeReplacments("AAAA","A","Bb")
Es ist gehen, um eine Liste der Zeichenketten zurück zu geben, die
BbAAA, BbBbAA, BbBbBbA, BbBbBbBb
enthalten Es ist fast immer gut zu kee p Methoden kurz. Wenn sie zu lang werden, brich sie einfach in kleinere Methoden mit klaren Namen. Auf diese Weise versuchen Sie nicht, eine große, lange Funktion zu lesen und zu verfolgen und zu testen. Das ist schwierig, egal ob du ein neuer Programmierer bist oder nicht. Der Trick ist nicht in der Lage zu sein, lange, komplexe Funktionen zu erstellen, die wir verstehen, weil wir sie geschrieben haben - es schafft kleine, einfachere Funktionen, die jeder verstehen kann.
haben Sie versucht, Inbuild-Funktion von vb.net String ersetzen output = input.Replace ("A", "Bb") –
Verwenden Sie einen StringBuilder und erstellen Sie eine neue Zeichenfolge die Substitutionszeichenfolge oder das aktuelle Zeichen anhängen. Versuchen Sie nicht, die gleiche Eingabezeichenfolge zu ersetzen. – Steve
Kannst du nicht einfach eine 'while-Schleife' verwenden? Du kannst alle gewünschten Prüfungen machen und Änderungen an der Zeichenkette vornehmen, dann verlasse die Schleife, sobald du zufrieden bist. – nora