Invertir una cadena en Java

4 minutos de lectura

Invertir una cadena en Java
Ron

tengo "Hello World" guardado en una variable de cadena llamada hi.

Necesito imprimirlo, pero al revés.

¿Cómo puedo hacer esto? Entiendo que hay algún tipo de función ya integrada en Java que hace eso.

Relacionado: invierta cada palabra individual de la cadena “Hello World” con Java

  • @JRL realmente debería ser String ih = “dlroW olleH”; Sistema.salida.println(ih);

    – Mateo Farwell

    27 de septiembre de 2011 a las 12:49

  • Desearía poder retractarme de mi voto cercano (como un duplicado). Volví a leer la otra pregunta y me di cuenta de que es sutilmente diferente a esta. Sin embargo, esta pregunta todavía se repite muchas veces en todo el sitio. Probablemente debería encontrar una pregunta diferente para marcar esto como un engaño.

    – Rob Hruska

    27 de septiembre de 2011 a las 13:31

  • ver entrevistaquizandanswers.blogspot.com/2020/04/…

    – dasunse

    4 de abril de 2020 a las 9:38

Invertir una cadena en Java
Sami Eltamawy

Para Problemas de los jueces en línea eso no permite StringBuilder o StringBufferpuedes hacerlo en su lugar utilizando char[] de la siguiente manera:

public static String reverse(String input){
    char[] in = input.toCharArray();
    int begin=0;
    int end=in.length-1;
    char temp;
    while(end>begin){
        temp = in[begin];
        in[begin]=in[end];
        in[end] = temp;
        end--;
        begin++;
    }
    return new String(in);
}

  • Aunque solo una nota. Esto fallará horriblemente para los “caracteres” que ocupan dos bytes.

    – Minas Mina

    9 de julio de 2018 a las 6:04

  • En realidad, normalmente funciona bien para la mayoría de los caracteres que ocupan 2 bytes. Lo que realmente falla son los puntos de código Unicode que ocupan unidades de código de 2 x 16 bits (en UTF-16).

    – Esteban C.

    8 de octubre de 2018 a las 5:33


  • Esta es una buena solución, pero ¿podemos hacer lo mismo si tenemos 10k caracteres en una cadena con una complejidad mínima?

    – Jatinder Kumar

    2 de marzo de 2019 a las 10:48


  • Buena solución (1+). Una mejora: StringBuilder (desde java5) será más rápido que StringBuffer. Saludos.

    – Michael Šrajer

    27 de septiembre de 2011 a las 12:49

  • Esto no funcionará en el caso general, ya que no tiene en cuenta que algunos “caracteres” en Unicode están representados por un par sustituto, es decir, dos caracteres Java, y esta solución hace que el par esté en el orden incorrecto. El método inverso de StringBuilder debería estar bien de acuerdo con JavaDoc: docs.oracle.com/javase/7/docs/api/java/lang/…

    – Ian Fairman

    16 de septiembre de 2014 a las 14:26


  • ¿Invierte los diacríticos Unicode en el orden correcto?

    – rogerdpack

    26 mayo 2021 a las 16:39

String string="whatever";
String reverse = new StringBuffer(string).reverse().toString();
System.out.println(reverse);

  • ¿Cuál es la complejidad de la misma? O (N) o más? N es igual a la longitud de la cadena.

    – Mukit09

    16 de febrero de 2015 a las 4:58

  • O(n) ya que tiene que iterar a través de los caracteres de la cadena al menos una vez.

    – Por favor trabaje

    29 de abril de 2017 a las 9:39

Invertir una cadena en Java
Comunidad

Estoy haciendo esto usando las siguientes dos formas:

Cuerda inversa por PERSONAJES:

public static void main(String[] args) {
    // Using traditional approach
    String result="";
    for(int i=string.length()-1; i>=0; i--) {
        result = result + string.charAt(i);
    }
    System.out.println(result);

    // Using StringBuffer class
    StringBuffer buffer = new StringBuffer(string);
    System.out.println(buffer.reverse());    
}

Cuerda inversa por PALABRAS:

public static void reverseStringByWords(String string) {
    StringBuilder stringBuilder = new StringBuilder();
    String[] words = string.split(" ");

    for (int j = words.length-1; j >= 0; j--) {
        stringBuilder.append(words[j]).append(' ');
    }
    System.out.println("Reverse words: " + stringBuilder);
}

  • ¿Cuál es la complejidad de la misma? O (N) o más? N es igual a la longitud de la cadena.

    – Mukit09

    16 de febrero de 2015 a las 4:58

  • O(n) ya que tiene que iterar a través de los caracteres de la cadena al menos una vez.

    – Por favor trabaje

    29 de abril de 2017 a las 9:39

Invertir una cadena en Java
aiobe

Eche un vistazo a la API de Java 6 en StringBuffer

String s = "sample";
String result = new StringBuffer(s).reverse().toString();

  • ¿Es esto mejor que StringBuilder?

    – CamHart

    11 de abril de 2017 a las 1:01

  • @CamHart No, es más lento, pero probablemente solo un poquito.

    – jcsahnwaldt Reincorporar a Monica

    8 de febrero de 2018 a las 18:01

  • Un pequeño punto de referencia con casi 100 millones de llamadas a métodos mostró una diferencia significativa entre StringBuffer y StringBuilder: stackoverflow.com/questions/355089/… Pero en este caso, solo hay dos llamadas (reverse() y toString()), por lo que la diferencia probablemente ni siquiera sea medible.

    – jcsahnwaldt Reincorporar a Monica

    8 de febrero de 2018 a las 23:53


¿Ha sido útil esta solución?