feed twitter facebook LinkedIn facebook

Java » Invertir una frase en Java

octubre 19, 2009 por Víctor Cuervo 1 Comentario Imprimir Imprimir

En el artículo Invertir una cadena con Java veíamos la forma en la cual podíamos dar la vuelta a una palabra. Lo mismo que podríamos hacer con el método .reverse() de StringBuilder.

Ahora vamos un paso más allá y vamos a ver como podemos invertir el orden de las palabras de una frase. Para ellos nos apoyaremos en una estructura de tipo pila. Puedes ver más información de qué es una pila en Crear una pila en Java.

La idea inicial es quedarnos con las palabras. Para poder acometer este primer paso tenemos que desmontar la frase en palabras. Para ellos nos vamos a apoyar en la clase StringTokenizer. La cual, mediante la simple instanciación de la misma, nos convierte la frase en un array de palabras.

  1. String sTexto = "En un lugar de la mancha de cuyo nombre no quiero acordarme";
  2. StringTokenizer frase = new StringTokenizer(sTexto);

Ahora creamos nuestra pila...

  1. Stack<String> pila = new Stack<String>();

E iremos insertando cada uno de los elementos del StringTokenizer.

  1. while (frase.hasMoreTokens()) {
  2. pila.push(frase.nextToken());
  3. }

Nos apoyamos el el método .hasMoreTokens() de la clase StringTokenizer, para ver si hemos extraído todos los elementos de la misma. La extracción de elementos de la clase StringTokenizer lo haremos mediante .nextToken(), el cual extrae y pasa al siguiente elemento.

Para insertar los elementos en la pila nos apoyamos en el método push().

Una vez cargada la pila, procederemos a la extracción de los elementos de la misma. El hecho de que la pila sea una estructura LIFO (Last In First Out) hace que lo insertado quede en orden inverso. Es por ello que tendremos la frase invertida de una forma muy sencilla.

  1. while (!pila.empty())
  2. System.out.print(pila.pop() + " ");

Cada elemento de la pila se extrae con el método .pop(). Un ejemplo muy útil de para qué utilizar una pila.

¿Se te ocurre otra forma de invertir una frase en Java?

Descargar el Codigo
Descargar el código
Error en el Codigo
Error en el código
Foro sobre Java
Foro sobre Java
tags: , , , , , , , ,

Artículos relacionados:

1 comentario »

RSS feed para los comentarios de esta entrada. TrackBack URI

  1. Alberto
    octubre 31, 2009 #

    Yo lo he realizado usando recursividad (aunque es más sencillo sin recursividad), aquí lo tienes:

    Una forma sería así:

    * Caso recursivo: Imprimir la letra que se pida.
    * Caso base: Si es la letra del final (es decir, la primera) imprimirla y finalizar.

    /**
    * Algoritmo resuelto: Palabra al revés usando recursividad
    * @author Alberto
    * @version 1.0
    */
    import java.util.Scanner;
    public class PalabraAlRevesRecursividad {
    public static void main(String[] args) {
    //Se pide el String
    System.out.println(“Introduzca una palabra”);
    Scanner sc = new Scanner(System.in);
    String palabra = sc.nextLine();

    imprimirReves(palabra,0);
    }
    public static void imprimirReves(String palabra, int num) {
    if(num == palabra.length()-1) {
    System.out.println(palabra.charAt(palabra.length() – 1 -num));
    }else {
    System.out.print(palabra.charAt(palabra.length() – 1 -num));
    imprimirReves(palabra,num+1);
    }
    }
    }

Deja un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*