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

#arrays #string #vb.net #user-input #string-length

#массивы #строка #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 amp; s amp; 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
 

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

Спасибо

Комментарии:

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

2. После того, как я это сделал, я получил следующие ошибки: Опция Strict On запрещает неявные преобразования из ‘Double’ в ‘Integer’. Параметр Strict on запрещает неявные преобразования из ‘Integer’ в ‘Double’

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

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

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

Ответ №1:

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

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

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

 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