Groovy extends the String class with a couple of padding methods. These methods allows us to define a fixed width a String value must occupy. If the String itself is less than the fixed width then the space is padded with spaces or any other character or String we define. We can pad to the left or the right of the String or both left and right and put the String in the center.
These methods are especially useful when we create Groovy scripts that run on the console and we want to format some output.
assert ' Groovy ' == 'Groovy'.center(12)
assert 'Groovy ' == "Groovy".padRight(12)
assert ' Groovy' == /Groovy/.padLeft(12)
assert '---Groovy---' == "Groovy".center(12, '-')
assert 'Groovy * * *' == "Groovy".padRight(12, ' *')
assert 'Groovy Groovy Groovy' == 'Groovy'.padLeft(20, 'Groovy ')
def createOutput = {
def table = [
// Page, Response time, Size
['page1.html', 200, 1201],
['page2.html', 42, 8853],
['page3.html', 98, 3432],
['page4.html', 432, 9081]
]
def total = { data, index ->
data.inject(0) { result, row -> result += row[index] }
}
def totalTime = total.curry(table, 1)
def totalSize = total.curry(table, 2)
def out = new StringBuffer()
out << ' Summary '.center(15, "*") << '\n\n'
out << 'Total pages:'.padRight(25)
out << table.size().toString().padLeft(6) << '\n'
out << 'Total response time (ms):'.padRight(25)
out << totalTime().toString().padLeft(6) << '\n'
out << 'Total size (KB):'.padRight(25)
out << totalSize().toString().padLeft(6) << '\n\n'
out << ' Details '.center(15, "*") << '\n\n'
table.each {
out << it[0].padRight(14)
out << it[1].toString().padLeft(5)
out << it[2].toString().padLeft(8)
out << '\n'
}
out.toString()
}
assert '''\
*** Summary ***
Total pages: 4
Total response time (ms): 772
Total size (KB): 22567
*** Details ***
page1.html 200 1201
page2.html 42 8853
page3.html 98 3432
page4.html 432 9081
''' == createOutput()