You may hear me go crazy when I see a return null; statement in the code. Unfortunately I've learned it the hard way. Whenever you have a possible null pointer, you need to check for it and add another path of execution to handle it.
Look at this code:
Can you count how many extra paths are there because of the null check? 2 extra conditions, and 1 extra collaborator (The StringUtils) to check for a null string.
Now look at the next code.
Doesn't that seem more stable? It's not hard to avoid return nulls, but it takes some discipline.
If you're still not convinced, listen to the guy who invented the null pointers: