Aujourd'hui, j'essaie de convertir une chaîne en chaîne inversée , par exemple (Cat Is Running into Running Is Cat) mot par mot et non caractère
Running Is Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
La sortie suivante est montré:
public static String reverse_recursion(String str) {
if (str == null)
return null;
else {
String Arry[] = str.split(" ");
int n = Arry.length - 1;
System.out.println(Arry[n] + "");
return reverse_recursion(Arry[n - 1]);
}
}
public static void main(String[] args) {
reverse_recursion("Cat Is Running");
}
J'essaie de convertir une chaîne en chaîne inversée comme ci-dessus mais via la méthode de récursivité, mais cela semble trop déroutant. et afficher plus d'erreurs. Quelqu'un peut-il s'il vous plaît m'aider à le comprendre. Merci beaucoup
Running Is Cat BUILD SUCCESSFUL (total time: 0 seconds)
Ce code affiche la sortie suivante:
public class ReverseString_ {
public static void reverse(String str) {
String[] a = str.split(" ");
for (int i = a.length - 1; i >= 0; i--) {
System.out.println(a[i] + " ");
}
}
public static void main(String[] args) {
reverse("Cat Is Running");
}
}
Ce code n'imprime pas l'index (0) pourquoi? quelqu'un peut-il m'aider à résoudre cette erreur s'il vous plaît
3 Réponses :
Cela devrait fonctionner:
public static String reverse(String s) {
int idx = s.indexOf(" ");
if (idx < 0) {
// no space char found, thus, s is just a single word, so return just s itself
return s;
} else {
// return at first the recursively reversed rest, followed by a space char and the first extracted word
return reverse(s.substring(idx + 1)) + " " + s.substring(0, idx);
}
}
public static void main(String[] args) {
System.out.println(reverse("Cat Is Running"));
}
Cette solution pourrait être utile. Les commentaires expliquent assez bien le code.
public static String reverse_recursion(String str) {
String[] arry = str.split(" ", 2); //Split into a maximum of 2 Strings
if (arry.length > 1) { //If there is more than 1 word in arry
//Return the reverse of the rest of the str (arry[1])
//and concatenate together with the first word (arry[0])
return reverse_recursion(arry[1]) + " " + arry[0];
}
return arry[0]; //If less than or equal to 1 word, just return that word
}
Merci beaucoup d'aide
@ user318974 Pas de problème. Si cette réponse vous a aidé, veuillez la marquer comme réponse acceptée :)
@MuhammadUsama Cela fonctionne maintenant correctement. Cas de test: Hello World From Here devient Here From World Hello .
Vous enverrez le dernier élément du tableau la prochaine fois au lieu de la chaîne sans la chaîne précédemment imprimée.
Remplacez votre déclaration de retour par celle-ci, cela devrait fonctionner.
return reverse_recursion(n==0?null:str.substring(0,(str.length()-Arry[n].length())-1));