O problema está no laço. Tu estás usando o tamanho da String texto (que é 39), quando devias estar usando o tamanho da String inverte (que é 6). Como o laço tenta avançar em um espaço de memória que não pertence a inverte, uma Exceção de ArrayIndexOutOfBoundsException é lançada. Tente esse código:
String texto = "Socorram-me, subi no ônibus em Marrocos";
String [] inverte = texto.split(" ");
for(int i = inverte.length - 1; i >= 0 ; i--){
System.out.println(inverte[i]);
}
No entanto, me permita dar uma solução alternativa:
final String texto = "Socorram-me, subi no ônibus em Marrocos";
List<String> list = new ArrayList<String>(Arrays.asList(texto.split(" ")));
Collections.reverse(list);
for(final String s : list)
System.out.println(s);
Esse código é mais robusto, pois:
- garante que os objetos String são referências imutáveis;
- evita qualquer checagem direta, delegando essa tarefa à API;
- torna o código mais legível quanto à intenção.