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
Sami Eltamawy
Para Problemas de los jueces en línea eso no permite StringBuilder
o StringBuffer
puedes 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
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
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()
ytoString()
), por lo que la diferencia probablemente ni siquiera sea medible.– jcsahnwaldt Reincorporar a Monica
8 de febrero de 2018 a las 23:53
@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