Я разрабатываю программу, в которой конечный пользователь вводит строку (AB, AC, AD... AZ), эта строка будет преобразована, например...
Если это AC, строка будет преобразована в ABC и, в свою очередь, сгенерирует три текстовых файла с определенной информацией (FileA, FileB и FileC) и так далее для других строк.
If stringC = "A-C" then
stringC = "ABC"
elseif stringC = "A-D" then
stringC = "ABCD"
...
elseif stringC = "A-Z" then
stringC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
End If
Я подумывал разработать его, используя условные выражения (if... then... elseif... End If), которые идентифицируют каждую строку, но у меня осталось бы очень обширное дерево условных операторов, если бы оно дошло до A-Z. Есть идеи, как это упростить?
С уважением, заранее спасибо.
Предполагая, что ваша входная строка stringC
всегда начинается с A
и имеет правильный формат A-X, вы можете использовать метод строки Split
для получения последнего символа. Затем вы можете получить индекс n
последнего символа в строке, представляющей алфавит, ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Наконец, вы можете получить первые символы n
из алфавита, чтобы получить расширенную версию входной строки.
Код будет примерно таким (пожалуйста, сверьтесь с вашим компилятором VB, у меня сейчас его нет под рукой)
Dim startEnd as String() = stringC.Split('-')
Dim lastLetter = startEnd(1)
Dim alphabet as String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim n as Integer = alphabet.IndexOf(lastLetter)
Dim result = alphabet.Substring(0, n) '// or maby n+1, test it
вы можете использовать подстроку, если вы передадите что-то вроде «D-X», используйте разделение, а затем получите индекс D и индекс X.
вот рабочий пример. https://dotnetfiddle.net/Ag0S81
Dim alphabet As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim GetAlphabetRange As Func(Of String, String) = Function(query As String) _
alphabet.Substring(
alphabet.IndexOf(Char.Parse(query.Split("-"c)(0))),
alphabet.IndexOf(Char.Parse(query.Split("-"c)(1))) -
alphabet.IndexOf(Char.Parse(query.Split("-"c)(0))) + 1)
' Test the function with different ranges
Console.WriteLine(GetAlphabetRange("A-N"))
Console.WriteLine(GetAlphabetRange("C-F"))
Console.WriteLine(GetAlphabetRange("X-Z"))
это работает. большое спасибо!!!!
В этом решении используется Dictionary
для хранения текстовых пар поиска и замены. Для заполнения массива используется цикл, но вы также можете жестко запрограммировать другие пары.
Затем мы используем цикл для применения замен. StringBuilder
используется вместо String
в целях повышения производительности.
' Set up a Dictionary with replacement text
Dim replacements As New Dictionary(Of String, String)
For i = 3 To 26
Dim search = "A-" & Char.ConvertFromUtf32(64 + i)
Dim replacement As New StringBuilder
For j = 1 To i
replacement.Append(Char.ConvertFromUtf32(64 + j))
Next j
replacements.Add(search, replacement.ToString)
Next i
Dim documentText As New StringBuilder("First fifteen letters of the alphabet are A-O, while the first eight are A-H")
' Use the Dictionary to replace the text
For Each replacement In replacements
documentText.Replace(replacement.Key, replacement.Value)
Next replacement
Console.WriteLine(documentText)