Я не вижу нигде, где вы добавляете слово в TreeSet 'a'.
Если я просто упускаю это (и я мог бы быть), я бы поспорил, что проблема в том, что TreeSet не гарантирует итерацию в порядке вставки. То есть вы добавляете «---» в последнюю очередь, но нет никаких причин, по которым он не выйдет из восьмого итератора и не завершит вашу программу.
Так что я бы сказал, избавьтесь от проверки, где вы видите, возвращает ли итератор "---", и посмотрите, куда вас это приведет.
успел проверить, поменять:
if (grab.equals("---"))
{
break;
}
до:
if (grab.equals("---"))
{
//break;
}
и работает как положено.
Удачи!