2011-09-30 11 views
6

¿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[].

+14

¿Esto es tarea? ¿No se usarían 'int' o' int [] 'como provisionales? – birryree

+2

http://www.java2s.com/Code/Java/Language-Basics/ReverseStringTest.htm –

+0

Cualquier método que revierte una cadena debería basarse en información temporal, esté o no encapsulada. –

Respuesta

7
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.

10

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)); 
} 
3
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! :)

1

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í.

5

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); 
0

Puede utilizar java.lang.StringBuilder clase:

String reservedString = new StringBuilder(str).reserve().toString(); 
+2

OP dijo sin StringBuilder – John61590

1

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); 
    } 

} 
1
public String reverseStr(String str) { 
    if (str.length() <= 1) { 
     return str; 
    } 

    return reverseStr(str.substring(1)) + str.charAt(0); 

} 
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 :)

0
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)); 
} 
} 
0
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.

Cuestiones relacionadas