Новая строка после 3 пробела в VB.net - PullRequest
0 голосов
/ 03 марта 2020

У меня проблема с разделением строки на новую строку в vb. net. Прямо сейчас я могу сделать это, чтобы разделить на один пробел. Я хочу разбить новую строку после 3 пробелов.

Dim s As String = "SOMETHING BIGGER THAN YOUR DREAM" 
Dim words As String() = s.Split(New Char() {" "c})

For Each word As String In words
      Console.WriteLine(word)                                         
Next

output :
SOMETHING 
BIGGER 
THAN 
YOUR 
DREAM

Desire output :
SOMETHING BIGGER THAN 
YOUR DREAM

Ответы [ 4 ]

1 голос
/ 03 марта 2020

Вы можете разделить вашу входную строку, затем l oop массив сгенерированных частей и добавить их к StringBuilder объекту.
Когда вы прочитали количество частей, кратное определенному значению, ( wordsPerLine, здесь), вы добавляете vbNewLine к текущей части.

Когда l oop завершится, выведите содержимое StringBuilder на консоль:

Dim input As String = "SOMETHING BIGGER THAN YOUR DREAM, NOT MORE THAN YOUR ACCOUNT BALANCE"

Dim wordsPerLine As Integer = 3
Dim wordsCounter As Integer = 1
Dim sb As StringBuilder = New StringBuilder()

For Each word As String In input.Split()
    sb.Append(word & If(wordsCounter Mod wordsPerLine = 0, vbNewLine, " "))
    wordsCounter += 1
Next
Console.WriteLine(sb.ToString())

Печать:

SOMETHING BIGGER THAN
YOUR DREAM, NOT
MORE THAN YOUR
ACCOUNT BALANCE 
1 голос
/ 03 марта 2020

Еще одна альтернатива, добавленная к существующим эффективным ответам, может быть:

Dim separator As Char = CChar(" ")
Dim sArr As String() = "SOMETHING BIGGER THAN YOUR DREAM".Split(separator)
Dim indexOfSplit As Integer = 3

Dim sFinal As String = Join(sArr.Take(indexOfSplit).ToArray, separator) & vbNewLine &
                       Join(sArr.Skip(indexOfSplit).ToArray, separator)

Console.WriteLine(sFinal)
0 голосов
/ 03 марта 2020

String.Join имеет перегрузку, которая поможет вам.

Первый параметр - это символ, используемый между элементами вашего массива.

Второй параметр - это массив, к которому вы будете sh обращаться. join.

Третий параметр - это начальная позиция, для первой строки в желаемом выводе это будет элемент с индексом 0.

Четвертый параметр - это длина, используемая для первой строки. мы хотим три элемента массива.

Private Sub OPCode()
    Dim s As String = "SOMETHING BIGGER THAN YOUR DREAM"
    Dim words As String() = s.Split(New Char() {" "c})
    Dim line1 As String = String.Join(" ", words, 0, 3)
    Console.WriteLine(line1)
    Dim line2 As String = String.Join(" ", words, 3, words.Length - 3)
    Console.WriteLine(line2)
End Sub
0 голосов
/ 03 марта 2020

Вместо использования разделения можно захватить 3 слова в группе захвата и сопоставить концевые пробельные символы.

При замене используйте группу, за которой следует новая строка.

Шаблон

(\S+(?:\s+\S+){2})\s*

Будет соответствовать:

  • ( Группа захвата 1
    • \S+ Совпадение 1+ без пробельных символов
    • (?:\s+\S+){2} Повторите 2 раза, сопоставляя 1+ пробельных символов и 1+ непробельных символов
  • ) Закрыть группу 1
  • \s* Совпадение концевых пробельных символов

. NET Regex demo | VB. NET демо

Пример кода

Dim s As String = "SOMETHING BIGGER THAN YOUR DREAM"
Dim output As String = Regex.Replace(s, "(\S+(?:\s+\S+){2})\s*", "$1" + Environment.NewLine)
Console.WriteLine(output)

Выход

SOMETHING BIGGER THAN
YOUR DREAM
...