È 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[]
.
È 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[]
.
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.
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));
}
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! :)
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ì.
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);
È possibile utilizzare la classe java.lang.StringBuilder:
String reservedString = new StringBuilder(str).reserve().toString();
l'OP ha detto senza StringBuilder – John61590
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);
}
}
public String reverseStr(String str) {
if (str.length() <= 1) {
return str;
}
return reverseStr(str.substring(1)) + str.charAt(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 :)
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);
}
Fatta eccezione per le variabili di loop.
È questo compito? Non usare 'int' o' int [] 'costituisce un temporaneo? – birryree
http://www.java2s.com/Code/Java/Language-Basics/ReverseStringTest.htm –
Qualsiasi metodo che inverta una stringa dovrebbe basarsi su informazioni temporanee, indipendentemente dal fatto che sia incapsulato o meno. –