Erro Estranho

Ola eu de novo
Quando compilo o código abaixo no compilador não aparece erro nenhum, mas com ele em execução, na tela o DOS aparece essa mensagem:
“Exception in thread “main” java.lang.StringIndexOutOfBoundsExcption: String index out of range: 3
at java.lang.StringBuffer.charAt(StringBufer.java:283)
at Trabalho2.main(Trabalho2.java:35)”

import javax.swing.JOptionPane;
public class Trabalho2
{
  public static void main (String[] args)
  {
  	String frase=JOptionPane.showInputDialog (null,"Informe uma frase");
  	String aux=frase;//.trim();//tira os espaços no inicio e no fim da frase
	frase=aux.toLowerCase();
  	int cont = 1; // contador setado em 1 para primeira palavra
  	
  	for(int i=0; i < frase.length(); i++)
  	{
  		if (frase.charAt(i) == ' ') // procura por epaço em branco
  			cont = cont + 1; // quando acha soma uma palavra
  	}
  	
  	JOptionPane.showMessageDialog(null,"Quantidade de palavras na frase\n"+cont);;
  	
  	StringBuffer texto=new StringBuffer(frase);//cria StringBuffer com o conteudo da string
  	for(int x=0; x < texto.length(); x++)
  	{

  		if ((texto.charAt(x)) == 'a')
  			texto.deleteCharAt(x);
  		
  		if ((texto.charAt(x)) == 'e')
  			texto.deleteCharAt(x);
  		
  		if ((texto.charAt(x)) == 'i')
  			texto.deleteCharAt(x);
  		
  		if ((texto.charAt(x)) == 'o')
  			texto.deleteCharAt(x);
  		
  		if ((texto.charAt(x)) == 'u')
			texto.deleteCharAt(x);
  	}
  	
  	JOptionPane.showMessageDialog(null,"Frase sem as vogais\n"+texto);;
  	System.exit(0);
  }
}

koeh!!
o metodo charAt(int) eh do String e não do StringBuffer!!!
e cara!!
pra contar as palavas use o StringTokenizer eh melhor q ficar contando espaço em branco ai eu coloco a seguinte String:
String fase=" oi ";
olha ai tem espaço pra caramba heheheh!!
quantas palavras vao dar? :twisted:

PARA ESTE EXEMPLO USEI O STRING.TRIM(), E ELIMINA O ESPAÇOS INICIAIS E FINAIS.
COMO CONHECIA ESTE METODO FIZ ASSIM, E QUAL METODO SUBSTITUI O CHARAT PARA STRINGBUFFER.

E ACONTECE QUE QDO USAVA IF ENCADEADO NÃO DAVA ESSO ERRO, MAS NÃO APAGAVA TODAS AS LETRAS, AGORA QUE MUDEI FUDEU TUDO

Não tem nada a ver charAt() ser de String. StringBuffer também tem charAt(), e se não tivesse, o código nem compilaria.

StringIndexOutOfBoundsException é uma exceção que ocorre quando você tenta acessar um índice de um string que não existe. Pelo que postou, ele tentou acessar a posição 3, que não existe.

Exemplo: “aeiou”. 5 caracteres, posições 0 a 4. Tentativas de acessar da 5 em diante gerarão a exceção.

Sobre seu programa, não vi partes onde possa ter gerado isso. Testei aqui em casa algumas vezes, e em todas funcionou bem, tirando o fato de que para " a " diz ter várias palavras, mas aí é erro de lógica.