По сути, я бы сказал, что Хотин - самое простое решение. Я вижу, как вы отвечаете на его ответ, что вам не нужны токены нулевой длины в начале и в конце.
Это поднимает вопрос: что произойдет, если строка не начинается и не заканчивается на $? Это ошибка или они необязательны?
Если это ошибка, тогда просто начните с:
if (!text.startsWith("$") || !text.endsWith("$"))
return "Missing $'s"; // or whatever you do on error
Если это пройдет, попадите в раскол.
Если $ не обязательны, я бы просто удалил их перед разбиением. i.e.:
if (text.startsWith("$"))
text=text.substring(1);
if (text.endsWith("$"))
text=text.substring(0,text.length()-1);
Тогда сделайте разделение.
Конечно, вы можете сделать более сложные регулярные выражения или использовать StringTokenizer, или, без сомнения, придумать десятки других сложных решений. Но зачем? Если есть простое решение, используйте его.
PS Есть также вопрос о том, какой результат вы хотите увидеть, если в строке два $, например "$ Foo $$ бар $". Должно ли это дать ["foo", "bar"] или ["foo", "", "bar"]? Расщепление Хотина даст второй результат, со строками нулевой длины. Если вы хотите получить первый результат, вы должны разделить ("\ $ +").