Using Guava's Splitter class:
Iterable split = Splitter.on(':').split("value1:value2::value3");
Splitter
does not omit empty results by default, though you can make one that does. Though it seems from what others are saying that what you're doing should work as well.