Fácil Java
Inverter string com StringBuilder
Enunciado
Escreva um programa que leia uma palavra e imprima a palavra invertida usando StringBuilder. Depois imprima também a palavra original para provar que ela não foi alterada.
Requisitos
- Usar
StringBuilderpara inverter. - Imprimir a palavra invertida.
- Imprimir a palavra original inalterada.
Código inicial
import java.util.Scanner;
public class InverteString {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String palavra = sc.nextLine();
// Seu código aqui
}
}
Saída esperada
Original: Java
Invertida: avaJ
Ver dica
StringBuilder tem o método reverse(). Lembre-se de que String é imutável, então a original não muda.
Mostrar solução
import java.util.Scanner;
public class InverteString {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String palavra = sc.nextLine();
// Cria um StringBuilder a partir da palavra
StringBuilder sb = new StringBuilder(palavra);
sb.reverse(); // inverte no próprio buffer
System.out.println("Original: " + palavra);
System.out.println("Invertida: " + sb.toString());
}
}
Passo a passo
- Importamos
Scannerpara ler a entrada do usuário. - Lemos a palavra com
sc.nextLine()e guardamos empalavra. - Criamos um
StringBuilderpassando a palavra no construtor; isso copia o conteúdo para um buffer mutável. - Chamamos
sb.reverse(), que inverte os caracteres dentro do próprioStringBuilder. - Imprimimos a palavra original, que permanece intacta.
- Imprimimos o resultado convertido para
Stringcomsb.toString().
Por que funciona
String é imutável, então palavra nunca é alterada. O StringBuilder é mutável e oferece reverse() para inverter os caracteres in-place. Assim, conseguimos a versão invertida sem criar várias strings intermediárias.
Erros comuns
- Tentar inverter com
palavra.reverse():Stringnão tem esse método; ocorre erro de compilação. UseStringBuilder. - Esquecer
toString()ao imprimir:System.out.println(sb)funciona porqueprintlnchamatoString(), mas em concatenação explícita é bom converter. - Usar
==para comparar strings: sempre useequals()para comparar conteúdo.
Outra forma de resolver
Percorrer a string de trás para frente com um laço e concatenar em um StringBuilder:
StringBuilder sb = new StringBuilder();
for (int i = palavra.length() - 1; i >= 0; i--) {
sb.append(palavra.charAt(i));
}
Essa abordagem é preferível se você precisar de alguma transformação a cada caractere.
Saída esperada
Original: Java
Invertida: avaJ