Как разбить строку на х символов - PullRequest
9 голосов
/ 08 января 2012

У меня есть программа, в которой пользователь вводит список чисел в виде строки.Этот список чисел всегда кратен 8.

Так что список может содержать 8, 16, 32, 40, 48 и т. Д.

Мне нужно разбить эту строку на каждую8 символов.

Например, скажем, пользователь ввел «1234123445674567»

Как разделить его на массив строк, где (0) - «12341234», а (1) - «45674567»

Примечание: Размер массива должен быть равен длине строки, деленной на 8.

Примерно так:

Dim stringArray(txtInput.Text.Length/8) as String

Редактировать: я знаю, что мог бы сделать это, сделав цикл, который насчитывает 8 чисел и разбивает его на массив, но он будет длинным и займет несколько переменных, и я знаю, что есть более эффективный способ сделать это.Я просто не знаю синтаксис.

Ответы [ 4 ]

5 голосов
/ 08 января 2012

Вы можете использовать цикл For и Substring:

Dim strings As New List(Of String)

For i As Integer = 0 To Me.txtInput.Text.Length - 1 Step 8
    strings.Add(Me.txtInput.Text.Substring(i, 8))
Next

Чтобы преобразовать список strings в массив (если он вам действительно нужен), вы можете использовать strings.ToArray().


Кроме того, вы можете использовать регулярные выражения и LINQ для причудливой однострочной:

Text.RegularExpressions.Regex.Matches(Me.txtInput.Text, ".{8}").Select(Function(x) x.Value)
4 голосов
/ 08 января 2012

Это должно разбить строку на массив из 8-символьных подстрок

Dim orig = "12344321678900987"
Dim res = Enumerable.Range(0,orig.Length\8).[Select](Function(i) orig.Substring(i*8,8))
0 голосов
/ 22 февраля 2016

Если развернуть принятый ответ, строка будет разбита на части, даже если строка не делится на делитель

    Public Function SplitInParts(s As String, partLength As Integer) As IEnumerable(Of String)
        If String.IsNullOrEmpty(s) Then
            Throw New ArgumentNullException("String cannot be null or empty.")
        End If
        If partLength <= 0 Then
            Throw New ArgumentException("Split length has to be positive.")
        End If
        Return Enumerable.Range(0, Math.Ceiling(s.Length / partLength)).Select(Function(i) s.Substring(i * partLength, If(s.Length - (i * partLength) >= partLength, partLength, Math.Abs(s.Length - (i * partLength)))))
    End Function
0 голосов
/ 08 сентября 2013
Function slice(ByVal s as String) As String()
    Return (From c As String in s).ToArray()
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...