It would be more efficient to not split the String, but use one single loop over the entire String. Use a few variables to keep track of the current state; a new word is started when the previous character is whitespace etc, and a word ends when the current character is whitespace etc. It's a bit trickier to get it right, so perhaps you should keep your current version. If you can improve efficiency at the cost of readability (by yourself in the first place) then you shouldn't do it (unless you need the extra efficiency because your resources are limited).
"more efficient" is not a well defined term. More efficient in terms of memory? speed? ease of understanding/refactoring?
just about everything in CS is a trade-off. faster execution may require more memory - a potential problem in mobile devices. Developers tend to spend more time fixing/correcting/debugging their code than anything else so writing code that is easy to understand usually saves more time.
Think about it...if you do something that saves a user a microsecond, then a million users will have to run that segment of code to save ONE SECOND.
However, if you write it in such a complicated way that it takes you eight hours to debug, test, package up, and distribute the patch, you have ended up 6 hours, 59 minutes and 59 seconds in the hole.
There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors