/**
* Wraps a string into lines of maximum width w.
* Words are kept intact; wrapping occurs between words.
*/
fun wrapText(text: String, width: Int): List<String> {
val words = text.split(" ")
val lines = mutableListOf<String>()
var currentLine = StringBuilder()
for (word in words) {
// If adding this word exceeds the width, push the current line and start a new one
if (currentLine.isNotEmpty() && currentLine.length + 1 + word.length > width) {
lines.add(currentLine.toString())
currentLine = StringBuilder()
}
// Add the word to the current line
if (currentLine.isNotEmpty()) {
currentLine.append(" ")
}
currentLine.append(word)
}
// Add the last line if not empty
if (currentLine.isNotEmpty()) {
lines.add(currentLine.toString())
}
return lines
}
fun main() {
val text = "Kotlin is a modern programming language that makes developers happier."
val width = 25
val wrapped = wrapText(text, width)
println("Wrapped text:")
for (line in wrapped) {
println(line)
}
}
/*
run:
Wrapped text:
Kotlin is a modern
programming language that
makes developers happier.
*/