У меня есть строка, которую вводит пользователь, длина зависит от длины введенной строки. В другом поле пользователь должен ввести количество равных частей, которые он хочет получить из этой строки.
Например:
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 On запрещает неявные преобразования из «Double» в «Integer». Опция Strict On запрещает неявные преобразования из «Целое число» в «Двойное».
@Mary У вас также нет Option Explicit
On и Option Infer
Off по умолчанию? Да, ситуации с абстрактным типом часто требуют, чтобы последний был включен — хотя есть способы обойти это, если вы можете жить с использованием вместо этого Object
— я думаю, что это имеет смысл.
@SteveCinq На самом деле у меня включены все 3. Сделайте вывод, просто сохраните немного ввода. Если вы наведете курсор на «выведенную» переменную, вы увидите, что она имеет допустимый тип. Мне очень не нравится использовать Object.
@Wolfhrat Да, это ошибки, которые вам нужно исправить, чтобы избежать ошибок во время выполнения.
Итак, вы, вероятно, просто хотите равное количество символов в строке. Вместо этого последняя строка может содержать только остаток.
Вы можете перебрать указанное количество строк (при условии, что число может быть преобразовано в целое число, поэтому используйте 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
Пожалуйста, включите Option Strict. Это процесс из 2 частей. Сначала для текущего проекта. В обозревателе решений дважды щелкните Мой проект. Выберите «Скомпилировать» слева. В раскрывающемся списке Option Strict выберите ON. Во-вторых, для будущих проектов — перейдите в меню «Инструменты» -> «Параметры» -> «Проекты и решения» -> «Параметры по умолчанию для VB». В раскрывающемся списке Option Strict выберите ON. Это убережет вас от ошибок во время выполнения. Я могу сказать, что сейчас его нет, потому что эта строка
Dim brLinija As Integer = TextBox2.Text
не скомпилируется.