Tag Archives: groovy

Simple RegEx and Closure example in Groovy

I’ve been intermittently reading Groovy in Action for the last few nights and whilst it all seems pretty straight forward, for me the real grasping of an understanding comes by writing some code to affirm what was read. That posed the dilemma of what to write, as since leaving uni most of my learning experiences in Java (and development concepts in general) have been in relation to real world business style scenarios. I gave a thought back to my high school days where I learnt how to program. Why not just start with a somewhat simple/trivial problem – e.g. a factorial calculator, or sentence word reverser and go from there? Sure it’s not anything too swish, but it seems a good way to get an understanding of the language.

So here I present a simple solution in Groovy that uses RegEx and Closures to captalise the first letter of each word in a string. I’ll also show you an even neater solution after….

First up:

[groovy]

String testString = ‘the quick brown fox jumped over the lazy dog’
String regex = /bw*s?b/

testString.eachMatch(regex) { match ->
print match.capitalize()
}

[/groovy]

Lines 1 and 2 should be pretty self explanatory. We’ve based our regex of the basis that a word consists of word characters only, may have a space after the last word character and has a word boundary on either side.

Lines 4-6 is where the cool stuff happens, as for each word match we make we want to upper case the first letter and print it out. The method eachMatch takes two arguments a String regex and a closure. From the Groovy docs‘A Groovy Closure is like a “code block” or a method pointer. It is a piece of code that is defined and then executed at a later point.’ In the example above we have defined the closure inline with one parameter match – parameters are listed before the ->. The closure calls capitalize on the match and prints it out.

We could have easily defined the closure separatley and provided it to eachMethod as such:

[groovy]
Closure capitalize = { match -> print match.capitalize() }
testString.eachMatch(regex, capitalize)
[/groovy]

Seems pretty easy right? Not many lines of code and quite succinct about what is happening. Well as is often the case, I did a little Google and here’s an even easier solution:

[groovy]
String testString = ‘the quick brown fox jumped over the lazy dog’
print testString.split(‘ ‘).collect{ it.capitalize() }.join(‘ ‘)
[/groovy]

In the end my solution was a first attempt into using Groovy to solve a problem without having much exposure to the language whilst at the same time trying not to use my Java mindset. After seeing the alternative solution on the Internet it kind of shows that if you know what to use Groovy can make things even simpler as it’s definitely cleaner without using the RegEx.

Installing Groovy on a Mac

Having heard about Groovy and Grails for the last few years but not having actually had a look at it I installed Groovy on my Mac the other week for a bit of a play. It’s always good and fun to have a look at a different language even if if you’re not going to use it in your day to day job. Coming from predominantly a Java background Groovy seemed like a good choice as it runs on the Java platform and the language is similar. Having had the opportunity to use Objective-C for a few months last year and seeing how in some ways it was more powerful than Java (but also in other ways frustrating), I was curious to see what power Groovy gave to a developer.

The first step though was to get Groovy installed on my Mac. So I thought I’d put a post up mainly for anyone new to developing on a Mac. Whilst I’ve had my Mac for a year or so, I hadn’t really had it setup for anything other than Java until recently, and there were definitely some things that were a little different to what I was used to on Windows as well from my prior limited stint in Ubuntu land.

These instructions are based on a setup for OS X. I’d imagine the setup may be similar on any other version?

  1. Java should already be installed on your machine. Confirm this by opening up a Terminal and typing in ‘java -version‘.
  2. Download the binary Zip release of Groovy from the Groovy site.
  3. Extract the contents into /usr/local – e.g. my install location is /usr/local/groovy-1.7.6/. You will probably need to need to use the sudo command for the extract as you will need to be superuser to write to the location.
  4. Check if a file called environment.plist exists in the following location /Users/YOUR_USER_NAME/.MacOSX. If it doesn’t create it.
  5. Open environment.plist in the Property List Editor
  6. Add an entry for JAVA_HOME if not present, ensure the value is the location of your Java installation. This should be /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
  7. Add an entry for GROOVY_HOME if not present and ensure the value is the location Groovy is installed. E.g. /usr/local/groovy-1.7.6
  8. Add an entry for PATH if not present, and ensure the Groovy bin and Java bin directories are present by adding  $JAVA_HOME:$GROOVY_HOME/bin
  9. Log out and re log back in for the changes to take effect.
  10. Check that everything is all setup correctly by opening a Terminal and running groovy -version which should show you which version of Groovy is installed.