Я думаю, что это оставляет нас ищет String.ReplaceFirst
функции. Поскольку их нет, мы можем просто написать эту функцию. Тогда код, который называет это становится гораздо более удобным для чтения, потому что это быстро очевидно, что он делает (от имени функции.)
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
Обратите внимание, как, когда вы читаете код, приведенный ниже, вы даже не придется тратить мгновенно пытаясь понять, что он делает. Это читаемо. Пока строка ввода содержит «A», замените первый «A» на «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
Вы можете оптимизировать или полностью заменить функцию. Важно то, что ваш код читабельен, кто-то может сказать, что он делает, и функция ReplaceFirst
может быть тестируемой.
Тогда, скажем, вы хотите еще одну функцию, которая дала вам все «версии» вашей входной строки как целевая строка заменяется:
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
Если вы звоните
dim output as List(of string) = GetIterativeReplacments("AAAA","A","Bb")
Это собирается вернуть список строк, содержащих
BbAAA, BbBbAA, BbBbBbA, BbBbBbBb
Это почти всегда хорошо для киев p методы короткие. Если они начинают становиться слишком длинными, просто разделите их на более мелкие методы с четкими именами. Таким образом, вы не пытаетесь читать и следовать и проверять одну большую длинную функцию. Это сложно, будь вы новым программистом. Трюк не способен создавать длинные сложные функции, которые мы понимаем, потому что мы их написали, - это создает небольшие, более простые функции, которые каждый может понять.
Вы пытались встроить функцию vb.net для замены строки output = input.Replace («A», «Bb») –
Используйте StringBuilder и создайте новую строку, добавляющую строку подстановки или текущий символ. Не пытайтесь заменить одну строку ввода. – Steve
Можете ли вы не просто использовать цикл while? .. Вы можете сделать все, что хотите, и изменить строки, которые хотите, а затем выйти из цикла, как только будете удовлетворены. – nora