¿Es posible revertir String
en Java sin usar ninguna de las variables temporales como String
, Char[]
o StringBuilder
?Invertir cadena en Java sin usar ninguna cadena temporal, Char o generador de cadenas
Solo se puede usar int
, o int[]
.
¿Es posible revertir String
en Java sin usar ninguna de las variables temporales como String
, Char[]
o StringBuilder
?Invertir cadena en Java sin usar ninguna cadena temporal, Char o generador de cadenas
Solo se puede usar int
, o int[]
.
String reverseMe = "reverse me!";
for (int i = 0; i < reverseMe.length(); i++) {
reverseMe = reverseMe.substring(1, reverseMe.length() - i)
+ reverseMe.substring(0, 1)
+ reverseMe.substring(reverseMe.length() - i, reverseMe.length());
}
System.out.println(reverseMe);
de salida:
!em esrever
Sólo por el gusto de hacerlo, por supuesto, el uso de StringBuffer sería mejor, aquí estoy creando nuevas cadenas para cada iteración, la única diferencia es que no presento una referencia nueva, y solo tengo un contador int.
Los objetos de la clase Java String son inmutables; sus contenidos no pueden modificarse después de creados.
necesitará al menos dos objetos temporales, uno para el resultado final y otro para los valores intermedios, incluso si encuentra una forma de evitar el uso de una variable local.
EDIT:
Dicho esto, ya que se puede utilizar int[]
puede ser capaz de hacer trampa.
Desde char
se pueden asignar a int
, puede utilizar String.charAt()
para crear una matriz int
con los valores de caracteres en orden inverso. O bien, puede usar String.toCharArray()
para obtener una matriz char
que se copiará en su int[]
temporal.
Luego usa la variable que contiene la referencia a su cadena original (o la variable de resultado, si tiene permiso) para comenzar desde una cadena vacía (fácilmente disponible con una asignación directa o String.substring()
) y use String.concat()
para crear el resultado final.
En ningún caso, sin embargo, podrá intercambiar los caracteres in situ como lo haría en C/C++.
EDIT 2:
Aquí está mi versión que no utiliza StringBuffer/Constructores internamente:
int r[] = new int[s.length()];
int idx = r.length - 1;
for (int i : s.toCharArray()) {
r[idx--] = i;
}
s = s.substring(0, 0);
for (int i : r) {
s = s.concat(String.valueOf((char)i));
}
String s = "Hello World!";
for(int i = 0; i < s.length(); i++)
{
s = s.substring(1, s.length() - i) + s.charAt(0) + s.substring(s.length() - i);
}
System.out.println(s); // !dlroW olleH
Sin variables temporales! :)
Como se puede utilizar un int, puede asignar un int un valor Char:
String aString = "abc";
int intChar = aString.charAt(0);
Usted tendrá que convertir de nuevo a la int char para asignarlo a aString.charAt (2)
Estoy seguro de que puedes resolverlo desde allí.
Una de muchas maneras:
String str = "The quick brown fox jumps over the lazy dog";
int len = str.length();
for (int i = (len-1); i >= 0; --i)
str += str.charAt(i);
str = str.substring(len);
System.out.println(str);
Puede utilizar java.lang.StringBuilder clase:
String reservedString = new StringBuilder(str).reserve().toString();
OP dijo sin StringBuilder – John61590
Primera añadir la cadena a sí mismo de forma inversa. Luego saca la segunda mitad de eso.
public class RevString {
public static void main(String[] args) {
String s="string";
for(int i=s.length()-1;i>=0;i--){
s+=s.charAt(i);
}
s=s.substring(s.length()/2, s.length());
System.out.println(s);
}
}
public String reverseStr(String str) {
if (str.length() <= 1) {
return str;
}
return reverseStr(str.substring(1)) + str.charAt(0);
}
Sin utilizar cualquier colección, StringBulider, StringBuffer o matriz temp revertir la cadena. Simple y nítido:
public static void main(String[] args) {
String test = "Hello World";
String rev = "";
Pattern p = Pattern.compile("[\\w|\\W]");
Matcher m = p.matcher(test);
while (m.find()) {
rev = m.group()+rev;
}
System.out.println("Reverse==" + rev);
}
salida
inversa == dlroW Olleh
Espero que ayude :)
public class Test {
static St`enter code here`ring reverseString(String str) {
for (int i = 0; i < str.length()/2; i++) {
if (i == 0) {
str = str.charAt(str.length() - 1 - i) + str.substring(i + 1, str.length() - 1 - i) + str.charAt(i);
} else {
str = str.substring(0, i) + str.charAt(str.length() - 1 - i)
+ str.substring(i + 1, str.length() - 1 - i) + str.charAt(i)
+ str.substring(str.length() - i, str.length());
}
}
return str;
}
public static void main(String args[]) {
String s = "ABCDE";
System.out.println(Test.reverseString(s));
}
}
String str = "Welcome";
for(int i=0;i<str.length();){
System.out.print(str.charAt(str.length()-1));
str = str.substring(0,str.length()-1);
}
excepción de variables de bucle.
¿Esto es tarea? ¿No se usarían 'int' o' int [] 'como provisionales? – birryree
http://www.java2s.com/Code/Java/Language-Basics/ReverseStringTest.htm –
Cualquier método que revierte una cadena debería basarse en información temporal, esté o no encapsulada. –