Преобразование AH в ABCDEFGH VB.Net

Я разрабатываю программу, в которой конечный пользователь вводит строку (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. Есть идеи, как это упростить?

С уважением, заранее спасибо.


62
3

Ответы:

Предполагая, что ваша входная строка 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)