Groovy 1.7.3 adds new functionality to the String class. For example we can use the expand() method to expand tabs in a String to spaces with a default tab stop size of 8. We can use a parameter to use a different tab stop size. But we can also go the other way around.
So if we have a tabular text based on spaces we can convert the String to a tab separated String. Here the default tab stop size is also 8, but we can use the parameter to define a different tab stop size.
// Simple ruler to display 0 up to 30
def ruler = (0..30).inject('\n') { result, c ->
result += (c % 10)
}
def stringWithTabs = 'Groovy\tGrails\tGriffon'
println ruler
println stringWithTabs.expand() // default tab stop is 8
println stringWithTabs.expand(10) // tab stop is 10
// Output:
// 0123456789012345678901234567890
// Groovy Grails Griffon
/ /Groovy Grails Griffon
assert 'Groovy Grails Griffon' == stringWithTabs.expand()
assert 'Groovy Grails Griffon' == stringWithTabs.expand(10)
def stringWithSpaces = 'Hubert Klein Ikkink'
def stringWithSpaces10 = 'Hubert Klein Ikkink'
println ruler
println stringWithSpaces
println stringWithSpaces10
// Output:
// 0123456789012345678901234567890
// Hubert Klein Ikkink
// Hubert Klein Ikkink
assert 'Hubert\tKlein\tIkkink' == stringWithSpaces.unexpand()
assert 'Hubert\tKlein\tIkkink' == stringWithSpaces10.unexpand(10)