I was working on some code where I needed to mask data, and the application was being written in Groovy. I came up with this (what I think is a) neat trick to do it, using regular expressions and lambda expressions/closures.
package example
class Model implements Serializable {
...
String value
...
def valueMasked() {
return value.replaceFirst('.*(?=.{4})', { match ->
return "".padLeft(match.length(), '*')
});
}
}