How to format an array of strings in lines with maxWidth without breaking the words in Swift

1 Answer

0 votes
import Foundation

func formatLines(words: [String], maxWidth: Int) -> [String] {
    var result: [String] = []
    var currentLine = ""
    var currentLength = 0

    for word in words {
        let wordLen = word.count

        // If adding this word exceeds maxWidth, push current line
        if currentLength + (currentLine.isEmpty ? 0 : 1) + wordLen > maxWidth {
            if !currentLine.isEmpty {
                result.append(currentLine)
            }
            currentLine = word
            currentLength = wordLen
        } else {
            if !currentLine.isEmpty {
                currentLine += " "
                currentLength += 1
            }
            currentLine += word
            currentLength += wordLen
        }
    }

    // Push the last line if not empty
    if !currentLine.isEmpty {
        result.append(currentLine)
    }

    return result
}

func main() {
    let words = ["This", "is", "a", "programming", "example", "of", "text", "wrapping"]
    let maxWidth = 12

    let lines = formatLines(words: words, maxWidth: maxWidth)

    for line in lines {
        print("\"\(line)\"")
    }
}

main()



/*
run:

"This is a"
"programming"
"example of"
"text"
"wrapping"

*/

 



answered Dec 2, 2025 by avibootz

Related questions

...