Интеллектуальное разделение строки в VB.net - PullRequest
1 голос
/ 02 августа 2010

Я хочу разбить строку на куски по 200 символов или меньше, но разбить на пробелы.Как я могу сделать это в VB.net?Например:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ut dui et sapien ultricies laoreet. Duis eleifend ante et tortor adipiscing tincidunt. Nulla sagittis purus sit amet mauris convallis auctor cursus orci volutpat. Nam id massa eu purus congue adipiscing. Nam a ligula in justo euismod fermentum eget et risus. Sed magna lectus, adipiscing in accumsan eu, porttitor id mauris. Suspendisse eros velit, ullamcorper elementum interdum et, tempor sed velit. Curabitur et velit purus, ut amet.

должна быть начальной строкой.Следуя этому примеру, я пытаюсь извлечь следующее:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ut dui et sapien ultricies laoreet. Duis eleifend ante et tortor adipiscing tincidunt. Nulla sagittis purus sit amet mauris convallis

и

auctor cursus orci volutpat. Nam id massa eu purus congue adipiscing. Nam a ligula in justo euismod fermentum eget et risus. Sed magna lectus, adipiscing in accumsan eu, porttitor id mauris.

и

Suspendisse eros velit, ullamcorper elementum interdum et, tempor sed velit. Curabitur et velit purus, ut amet.

при условии, что на концах не осталось пробелов.Как я могу добиться этого в vb.net?

Ответы [ 2 ]

3 голосов
/ 02 августа 2010

Это крики для регулярного выражения.

Imports System.Text.RegularExpressions

…

Function Split(ByVal source As String, ByVal chunkMaxLength As Integer) As IEnumerable(Of String)
    Dim index = 0
    Dim maxIndex = source.Length - 1
    Dim src = source
    Dim results As New List(Of String)

    Do While index < maxIndex
        src = source.Substring(index)
        Dim match = Regex.Match(src, "^.{0," & chunkMaxLength & "}\b").ToString()
        results.Add(match)
        index = index + match.Length
    Loop

    Return results

End Function
3 голосов
/ 02 августа 2010

Вот функция:

Private Function split(ByVal textToSplit As String, ByVal charCount As Integer) As System.Collections.Queue

    Dim returnQueue As New System.Collections.Queue

    Dim words As String() = textToSplit.Split(" ".ToCharArray)

    Dim currentChunk As String = ""

    For index As Integer = 0 To words.GetUpperBound(0)

        Dim currentWord As String = words(index)

        If currentChunk.Length + currentWord.Length <= charCount Then
            'The phrase is still short enough
            currentChunk += " " & currentWord
        Else
            'The phrase would be too long
            'Add the chunk to the list
            returnQueue.Enqueue(currentChunk)
            'Start a new chunk
            currentChunk = currentWord
        End If

    Next index

    'Reached the end. Add the last chunk to the list
    returnQueue.Enqueue(currentChunk)

    Return returnQueue

End Function

Назовите это так:

    Dim s As String = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ut dui et sapien ultricies laoreet. Duis eleifend ante et tortor adipiscing tincidunt. Nulla sagittis purus sit amet mauris convallis auctor cursus orci volutpat. Nam id massa eu purus congue adipiscing. Nam a ligula in justo euismod fermentum eget et risus. Sed magna lectus, adipiscing in accumsan eu, porttitor id mauris. Suspendisse eros velit, ullamcorper elementum interdum et, tempor sed velit. Curabitur et velit purus, ut amet."

    For Each chunk As String In split(s, 200)
        Debug.WriteLine(chunk)
    Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...