2011-09-30 15 views
6

È possibile invertire String in Java senza utilizzare alcuna variabile temporanea come String, Char[] o StringBuilder?Stringa inversa in Java senza l'uso di stringhe temporanee, Char o String Builder

Può utilizzare solo int o int[].

+14

È questo compito? Non usare 'int' o' int [] 'costituisce un temporaneo? – birryree

+2

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

+0

Qualsiasi metodo che inverta una stringa dovrebbe basarsi su informazioni temporanee, indipendentemente dal fatto che sia incapsulato o meno. –

risposta

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

uscita:

!em esrever 

Solo per il gusto di farlo, ovviamente utilizzando StringBuffer sarebbe meglio, qui sto creando nuove stringhe per ogni iterazione, l'unica differenza è che non sto introducendo un nuovo riferimento, e ho solo un contatore int.

10

Gli oggetti della classe Java String sono immutabili - il loro contenuto non può essere modificato dopo la creazione.

È necessario almeno due oggetti temporanei, uno per il risultato finale e uno per i valori intermedi, anche se si trova un modo per evitare l'utilizzo di una variabile locale.

EDIT:

Detto questo, dal momento che è possibile utilizzare int[] si può essere in grado di imbrogliare.

Dal char può essere assegnato a int, è possibile utilizzare per creare un String.charAt()int array con i valori dei caratteri in ordine inverso. Oppure potresti essere autorizzato a utilizzare String.toCharArray() per ottenere un array char che verrà copiato sul tuo int[] temporaneo.

Poi si utilizza la variabile che contiene il riferimento alla stringa originale (o variabile di risultato, se v'è permesso uno) di partire da una stringa vuota (facilmente ottenibile con un affidamento diretto o String.substring()) e utilizzare String.concat() per creare il risultato finale.

In nessun caso, tuttavia, sarà possibile scambiare i caratteri sul posto come si farebbe in C/C++.

EDIT 2:

Ecco la mia versione, che non fa uso di StringBuffer/Costruttori 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 

Nessun variabili temporanee! :)

1

Poiché è possibile utilizzare un int, è possibile assegnare un int un valore char:

String aString = "abc"; 

int intChar = aString.charAt(0); 

Si dovrà convertire da int indietro al char per assegnarlo a aString.charAt (2).

Sono sicuro che puoi capirlo da lì.

5

Uno dei tanti modi:

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

È possibile utilizzare la classe java.lang.StringBuilder:

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

l'OP ha detto senza StringBuilder – John61590

1

Prima aggiungere la stringa a se stesso in modo inverso. Quindi prendi la seconda metà.

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

Senza utilizzare qualsiasi raccolta, StringBulider, StringBuffer o matrice temperatura invertire la stringa. Semplice e croccante:

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

uscita

Reverse == dlroW olleh

Speranza che aiuta :)

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

Fatta eccezione per le variabili di loop.