StringBuffer alterar caracter para maiúsculo

4 respostas
lisasf

[b]Olá a todos. Espero dizer isso sempre a partir de hoje…

Preciso converter a primeira letra de cada palavra de uma frase em letra maiúscula.

Programei algo, mas estou com dificuldades… Gostaria de saber se teria como modificar o caracter usando o setCharAt() da maneira como utilizei.
Por favor, me indiquem o caminho. Obrigada.
[/b]

import java.io.*;
import java.lang.StringBuffer.*;

public class Maiuscula {

   public static void main(String[] args) {

      StringBuffer mensagem = new StringBuffer("qualquer coisa aqui");
       StringBuffer resultado= TornarMaiuscula(mensagem);
       System.out.println(resultado);
      
    }


      public static StringBuffer TornarMaiuscula(StringBuffer palavra) {

          for (int i=0; i>=palavra.length();i++ ){

              if (palavra.substring(i,i+1).equals(" ")){
                  palavra.setCharAt(palavra.substring(i,i+2),(palavra.substring(i,i+2).toUpperCase()));
                  
              }
          }
          return (palavra);
      }
}

4 Respostas

ViniGodoy

Olá.

Não tem como. Strings, no java, são imutáveis. Ou seja, é impossível alterar seu conteúdo.
Ainda que o método setCharAt existisse (pois ele não existe), ele retornaria uma cópia da String com o conteúdo modificado.

Então, para resolver o seu problema, faça o seguinte:

  1. Crie uma String em branco;
  2. Percorra a String original letra-a-letra;
  3. Copie a letra outra String, passando para maiúscula apenas as letras após o espaço.
ViniGodoy

Ah, desculpe, agora que li seu código e vi que vc usa um StringBuffer, e não uma String.

O StringBuffer é mutável, portanto, você pode alterar letras dessa forma sim. Verifique apenas a condição de parada do seu for (que está invertida), e se você está usando os índices corretamente. Afinal, como vc está fazendo contas com seu índice i, você pode ter problemas quando chegar aos últimos índices de sua String.

Uma maneira mais fácil é, ao invés de testar se a próxima é um espaço para alterar a posterior a ela, testar se a anterior foi um espaço para alterar a atual. A vantagem dessa abordagem é que vc não terá problema no último caracter e o primeiro (que seria o caractere problemático) é um caracter que pode ser pulado pois vc tem certeza que ele será sempre maiúsculo.

Outra dica: No lugar da classe StringBuffer, use a StringBuider. Não muda nada no seu código, mas a StringBuilder costuma a ser mais rápida.

lisasf


Vini Godoy obrigada pelas dicas, inclusive já as programei, porém meu código continua com erro [método setCharAt()] na seguinte linha:

palavra.setCharAt((palavra.substring(i)),(palavra.substring(i).toUpperCase()));

[b]
Será que devo importar outra class?Qual?
Mensagem de erro:

[color=red]cannot find symbol[/color]

symbol  : method append(ChangeLabelText.Stringltem)

location: class javax.microedition.lcdui.Form

fmMain.append(siUser);

1 error[/b]
ViniGodoy

Vou mover o seu tópico para a área de JavaME, talvez alguém saiba te ajudar melhor lá.

Mas o erro é bastante explícito. Diz que não conseguiu usar um método chamado append, dentro da classe frmMain. Não deveria ser frmMain.add?

Criado 25 de abril de 2011
Ultima resposta 26 de abr. de 2011
Respostas 4
Participantes 2