#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