Как разбить строку на массив строк введенной длины в VB.net

У меня есть строка, которую вводит пользователь, длина зависит от длины введенной строки. В другом поле пользователь должен ввести количество равных частей, которые он хочет получить из этой строки.

Например:

Dim unos As String = "Jedna duga linija teksta koju zelim prelomiti na dijelove"

Теперь я хочу разбить это на массив строк. Каждая часть этой строки зависит от введенного количества частей, например

EDIT:

У меня есть этот код:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim unos As String = TextBox1.Text
        Dim brLinija As Integer = TextBox2.Text
        Dim unosNiz As New List(Of String)
        For i As Integer = 0 To Convert.ToInt32(unos.Length / brLinija) - 1
            unosNiz.Add(unos.Substring(i, unos.Length / brLinija))
        Next
        For Each s As String In unosNiz
            TextBox3.Text = TextBox3.Text & s & vbCrLf
        Next
    End Sub

brLinija — целое число, введенное пользователем (количество строк строкового массива)

User entered number of lines: 4

Текущий выход:

Jedna duga lin
edna duga lini
dna duga linij
na duga linija
a duga linija 
 duga linija t
duga linija te
uga linija tek
ga linija teks
a linija tekst
 linija teksta
linija teksta 
inija teksta k
nija teksta ko
Jedna duga lin
edna duga lini
dna duga linij
na duga linija
a duga linija 
 duga linija t
duga linija te
uga linija tek
ga linija teks
a linija tekst
 linija teksta
linija teksta 
inija teksta k
nija teksta ko

Вывод, который я хочу:

jedna duga lini
ja teksta koju
zelim prelomiti
na dijelove

Я просто запутался, как я должен правильно разбить эту строку на подстроки.

Спасибо

Пожалуйста, включите Option Strict. Это процесс из 2 частей. Сначала для текущего проекта. В обозревателе решений дважды щелкните Мой проект. Выберите «Скомпилировать» слева. В раскрывающемся списке Option Strict выберите ON. Во-вторых, для будущих проектов — перейдите в меню «Инструменты» -> «Параметры» -> «Проекты и решения» -> «Параметры по умолчанию для VB». В раскрывающемся списке Option Strict выберите ON. Это убережет вас от ошибок во время выполнения. Я могу сказать, что сейчас его нет, потому что эта строка Dim brLinija As Integer = TextBox2.Text не скомпилируется.

Mary 22.12.2020 00:56

После того, как я это сделал, я получил эти ошибки: Option Strict On запрещает неявные преобразования из «Double» в «Integer». Опция Strict On запрещает неявные преобразования из «Целое число» в «Двойное».

Wolfhrat 22.12.2020 01:02

@Mary У вас также нет Option Explicit On и Option Infer Off по умолчанию? Да, ситуации с абстрактным типом часто требуют, чтобы последний был включен — хотя есть способы обойти это, если вы можете жить с использованием вместо этого Object — я думаю, что это имеет смысл.

SteveCinq 22.12.2020 03:20

@SteveCinq На самом деле у меня включены все 3. Сделайте вывод, просто сохраните немного ввода. Если вы наведете курсор на «выведенную» переменную, вы увидите, что она имеет допустимый тип. Мне очень не нравится использовать Object.

Mary 22.12.2020 07:16

@Wolfhrat Да, это ошибки, которые вам нужно исправить, чтобы избежать ошибок во время выполнения.

Mary 22.12.2020 07:17
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
5
195
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, вы, вероятно, просто хотите равное количество символов в строке. Вместо этого последняя строка может содержать только остаток.

Вы можете перебрать указанное количество строк (при условии, что число может быть преобразовано в целое число, поэтому используйте Integer.TryParse() для проверки ввода), затем разделите длину строки в символах на количество строк и возьмите это количество символов за итерацию.

Что-то вроде этого:

Imports System.Linq

' You should also check whether the TextBox.Text contains any chars
Dim unos As String = TextBox1.Text
Dim brLinija As Integer = 0

If (Not Integer.TryParse(TextBox2.Text, brLinija)) Then
    MessageBox.Show("Invalid input")
    Return
End If

Dim charPerPart = CInt(Math.Ceiling(unos.Length / brLinija))
Dim unosNiz As New List(Of String)
For i As Integer = 0 To brLinija - 1
    unosNiz.Add(String.Concat(unos.Skip(charPerPart * i).Take(charPerPart)))
Next

Он генерирует этот вывод:

Jedna duga lini
ja teksta koju 
zelim prelomiti
 na dijelove

Другие вопросы по теме