Non ci siamo ancora capiti e non hai capito l'errore né come si usa StringTokenizer·
Il tuo errore viene fuori dal fatto che chiedi nextToken ad un tokenizer che non ha più elementi ed è l'unico modo che il sistema ha per segnalarti l'errore.
Il fatto che commentando quella riga tu non abbia l'errore significa come ti ho detto (cercando di capire la contorsione di ricorsioni del tuo codice) che non ti trovi mai in una condizione del genere o perché ogni volta che fai nextToken il token è valido oppure perché non ti trovi mai con R < 0.

Se tu vuoi lanciare una eccezione, devi agire in altro modo (è diversa la questione) e ti basta quanto segue
Se tu hai una stringa fatta in questo modo:

codice:
String s = "A B C D E F";
e fai
codice:
StringTokenizer token= new StringTokenizer(s," ");
hai un oggetto in cui ci sono 6 elementi.
L'oggetto lo scorri in genere in questo modo

codice:
String temp ; 
 while (token.hasMoreTokens()) {
         temp = token.nextToken(); 
         if (temp.trim().length() > 1){
                throw new Exception(); 
          }
         System.out.println(temp);
 }
su temp puoi chiederti quanto è grande (se 1 più).
La tua eccezione va lanciata in questo modo.

Prova a vedi, non è necessaria nemmeno la ricorsione.
A riguardo ti consiglio di dare un'occhiata alle API di StringTokenizer e alle API di String