Вы создаете проблему с помощью строителя строк. Они для построения одной строки. Вы можете AppendLine
, если хотите, но все, что вам нужно сделать, это превратить одну существующую строку в конструкторе в строку LONGER с парой символов CRLF
в конце. В строителе строк отсутствует понятие «линии» в смысле «набора отдельных строк, которые можно перемешать», как, например, в свойстве TextBox .Lines
(которое на самом деле представляет собой массив строк, но есть шаг преобразования, который идет между одной строкой с CRLF-символами в нем и массивом строк-одной строкой на строку )
В основном текстовое поле разделяет текст на CRLF, когда вы запрашиваете его строки, и если вы устанавливаете его строки, он присоединяется к массиву, который вы даете ему вместе с CRLF, чтобы сделать одну длинную строку
Я рекомендую вам выбросить строителя строк и просто перетасовать строки в текстовом поле:
Dim rnd as New Random
Dim shuffledX = textbox1.Lines.OrderBy(Function(x) rnd.Next()).ToArray()
Все это «извлечение строк из текстового поля, помещение их в построитель, разбиение строителя (делает один строка), помещая его в список (ваш список содержит одну строку), получая строки (есть только одна) из списка в случайном порядке ....
Просто выбросьте все это. Перемешать * 101 9 *
Если вы читаете файл, чтобы получить свои строки, у вас есть массив строк, вы можете перемешать его!:
Dim x = File.ReadAllLines("path...")
Dim shuffledX = x.OrderBy(...).ToArray()
Если ваш пользователь дает вам по одной строке за раз, поместите их в список (из строки) и перемешайте его:
Dim x as New List(Of String)
x.Add(Console.ReadLine())
x.Add(Console.ReadLine())
x.Add(Console.ReadLine())
x.Add(Console.ReadLine())
x.Add(Console.ReadLine())
Dim shuffledX = x.OrderBy(...).ToArray()
Если вы действительно откуда-то получаете строку или построитель строк, то разбейте их на CRLF:
Dim s = $"My{Environment.NewLine}string{Environment.NewLine}with{Environment.NewLine}lines"
Dim x = s.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
Dim shuffledX = a.OrderBy(...).ToArray()
После того, как у вас будут перетасованные строки
Если вы хотите поместить их в текстовое поле, а они в массив, вы можете назначить их свойству строк текстового поля:
textbox2.Lines = shuffledX
Если вы хотите записать их в файл, напишите массив:
File.WriteAllLines(...)
Если вы хотите выкачать их на консоль:
For Each s in shuffledX
Console.WriteLine(s)
Next s
Если вам нужно их как строку, одну строку, затем объедините массив в одну строку:
Dim s = string.Join(Environment.NewLine, shuffledX)
Вы можете установить textbox.Text = s
или поместить его в строитель строк (For Each t in s sb.AppendLine(t)
, или записать файл (File.WriteAllText("path", s)
), выгрузите его на консоль (Console.Write(s)
) ...
При всем этом вы должны четко понимать, что такое строитель строк, а что нет, что за штука ng есть и нет, и что такое массив строк / нет. Вы должны использовать наиболее подходящее хранилище данных для этой задачи; если массив входит, перемешайте массив. Если поступает одна строка, разбейте ее на массив и перемешайте массив. Не берите массив и не помещайте его в строителя строк, а попросите нас помочь перетасовать строителя строк - это безумие, единственное, что вы можете сделать, это отменить неправильный шаг (поместить в построитель строк) с помощью stringBuilder.ToString().Split()
, чтобы отменить неправильный шаг при помещении массива в строитель строк - превращение строителя строк в строку и последующее разбиение строки возвращает к массиву, который можно перемешать.