-2
votes

Comment écrire une méthode récursive statique en Java?

Je veux écrire des codes à l'aide d'une méthode de récursive statique en Java, Cleanstring (String S) qui accepte une chaîne de lettres S et renvoie une chaîne dans laquelle les lettres adjacentes sont identiques à la même apparition de cette lettre. La méthode est sensible à la casse.

Par exemple: P>

cleanString("sensssaatiionnaallll!") -> "sensational!"                             

cleanString("PPProoggggraamm") -> "Program"

cleanString("Lletterriiing") -> "Lletering"


4 commentaires

Qu'avez-vous fait jusqu'à présent ? Cela nous aiderait à commenter les améliorations que vous pouvez faire au code pour atteindre vos résultats.


Comment êtes-vous arrivé à la décision de faire une fonction récursive pour résoudre ce problème? Est-ce votre devoir?


Voulez-vous dire VOID Clearstring (String s) ou String CleanString (String) ?


Et comment vous allez effacer "gooooogle"?


4 Réponses :


-2
votes

Pourquoi vous voulez faire une méthode statique pour cela?

Whay j'ai compris est que vous souhaitez supprimer des caractères répétés de votre chaîne d'entrée.

Vous pouvez le faire sous le code ci-dessous. xxx

Si vous souhaitez que vous puissiez créer une méthode de cette 2 lignes en tant que fonctionnalité de votre code.

J'espère que cela aide!


2 commentaires

Il veut que les manches répétées soient réduites, pas seulement des personnages distincts.


Vous êtes très tranchant!



1
votes

Essayez ceci: xxx

  • Tout d'abord, il vérifie si la longueur de la chaîne est inférieure à 1. S'il s'agit, renvoyez la chaîne elle-même (qui est vide) et arrêtez la récursion.

  • Suivant Obtenez le premier caractère de la chaîne. (E.G ppprooggggramamm -> p )

  • Obtenez le nombre de caractères dans le démarrage qui est égal au premier caractère (3 dans le cas de ppprooggggramm )

  • Appelez à nouveau la fonction, mais cette fois-ci enlevant les premiers caractères de l'étape ci-dessus et préparé le premier caractère. ( 'P' + Cleanstring ("ROOGGGGGRAMM") )


0 commentaires

0
votes

Il suffit de générer une nouvelle chaîne et d'exclure les caractères de répétition.

public class Example {
  public static int main(String[] args) {
    String input = "sensssaatiionnaallll";
    String output = cleanString(input, 0);
    System.out.println(output); // print: sensational
    return 0;
  }

  private static String cleanString(String input, int index) {
    if(input == null) return "";
        if(index >= input.length()) return "";

        StringBuilder output = new StringBuilder();

        char current = input.charAt(index);

        int nextIndex = index + 1;
        if(nextIndex >= input.length()) {
            return output.append(current).toString();
        }

        char next = input.charAt(nextIndex);

        if (current != next) {
            output.append(current);
        }

        output.append(cleanString(input, nextIndex));

        return output.toString();
  }
}


3 commentaires

Ce code peut-il être appelé en tant que fonction à l'intérieur de la méthode principale?


Ce n'est pas récursif


Désolé, j'ai une erreur et je ne pouvais pas remarquer qu'il faut une méthode récursive. J'ai ajouté une méthode récursive dans la réponse.



0
votes

code reconsive le plus court pour supprimer les caractères adjacents de la chaîne d'entrée.

public class StackOverflow { 

static String cleanString(String input) {
    return input==null || input.length()<=1?input:cleanStringWrapper(input.substring(1),input.substring(0,1));
}

static String cleanStringWrapper(String input, String result) {
  if (input.length() - 1 <= 0) {
    return result+(result.charAt(result.length() - 1)!=input.charAt(0)?input:"");
} else {
    return cleanStringWrapper(input.substring(1), result+(result.charAt(result.length() - 1) != input.charAt(0)?input.charAt(0):""));
}
} 

 public static void main(String[] args) 
 {
     System.out.println(cleanString("OOPS"));
     } 
 }


3 commentaires

Bonjour, puis-je savoir où implémentez-vous ce code? Comment le mettre dans la fonction principale ??


Bonjour, j'ai partagé le code mis à jour avec la classe principale. S'il vous plaît passez à travers une fois. Si vous trouvez des difficultés plus loin, alors nous pouvons discuter.


Bon, ça marche! Apprécié vos efforts (: