2017-10-08 4 views
0

Mon code me donne une sortie comme # check ## done654321 mais je veux quelque chose comme "# check ## done123456" en utilisant la récursivité. La chaîne d'entrée est replaceD ("123 # check # 456 # done"). Comment puis-je faire? Est-ce possible?Déplacez tous les chiffres à la fin de la chaîne en utilisant la récursivité

 public String replaceD(String str){ 
     String str1 = ""; 
     String str2 = ""; 
     if(str.length() == 0){ 
      return ""; 
     } 
     char ch = str.charAt(0); 
     if(ch >= '0' && ch <= '9'){ 
      str1 = str1 + ch; 
     } 
     else{ 
      str2 = str2 + ch; 
     } 
    return str2 + replaceD(str.substring(1))+str1; 
} 
+0

'str1 = ch + str1;' – AJNeufeld

+0

Il donnerait toujours la même sortie. –

+0

Quelle est votre entrée et votre sortie attendue? S'il vous plaît poster quelques autres exemples. – Steampunkery

Répondre

0

En utilisant Recursion

public static void usingRecursion(String str){ 
     System.out.println(replaceD_2(str, "")); 
    } 

    private static String replaceD_2(String str, String str2){ 
     String str1 = ""; 

     if(str.length() == 0){ 
      return str2; 
     } 
     if(str.charAt(0) >= '0' && str.charAt(0) <= '9'){ 
      str2 = str2 + str.charAt(0); 
     } 
     else { 
      str1 = str1 + str.charAt(0); 
     } 
     return str1 + replaceD_2(str.substring(1), str2); 
    } 

utilisant des algorithmes itératifs

public static void main(String[] args) { 
     String input = ScannerUtils.scanForString(); 
     StringBuilder digitBuilder = new StringBuilder(); 
     StringBuilder charBuilder = new StringBuilder(); 
     for(int i = 0; i< input.length(); i++){ 
      if(input.charAt(i) >= '0' && input.charAt(i) <= '9'){ 
       digitBuilder.append(input.charAt(i)); 
      } 
      else { 
       charBuilder.append(input.charAt(i)); 
      } 
     } 
     String output = charBuilder.toString().concat(digitBuilder.toString()); 
     System.out.println(output); 
    } 
0

Est-il nécessaire que l'ordre doit être préservé ou doit-il être trié? Si c'est juste l'ordre à conserver, supprimez le tri et ajoutez directement str2.

Code pour le tri donné ci-dessous

public String replaceD(String str, String str1, String str2){ 
     String strtemp1=""; 
     String strtemp2=""; 

     if(str.length() == 0){ 
      String k[] = str2.split(""); 
      Arrays.sort(k) 
      str2="" 
      for (int i = 0; i < k.length; i++) { 
       str2+=k[i]; 
      } 
     return str1+str2; 
     } 

     char ch = str.charAt(0); 
     if(ch >= '0' && ch <= '9'){ 
      str1 = str1 + ch; 
     } 
     else{ 
      str2 = str2 + ch; 
     } 

    return replaceD(str.substring(1),str1+strtemp1, str2+strtemp2); 
    } 
+0

La chaîne d'entrée est replaceD ("12ab45"). Il n'y a qu'un seul paramètre en tant que chaîne. –

0
 public String replaceD(String str){ 
     String str1 = ""; 
     String str2 = ""; 
     if(str.length() == 0){ 
      return ""; 
     } 
     int l = str.length(); 
     char ch = str.charAt(l-1); 
     if(ch >= '0' && ch <= '9'){ 
      str1 = str1 + ch; 
     } 
     else{ 
      str2 = str2 + ch; 
     } 
    return replaceD(str.substring(0,l-1))+str2+str1; 
} 
+0

Est-ce correct? Est-ce que cela fonctionnera –

+0

cela donnera-t-il aussi des caractères non numériques dans l'ordre? Par exemple si la chaîne d'entrée est 12ab34.it devrait me donner "ab1234". –

+0

Oui, puisque la récursivité utilise la pile. toujours commencer à la fin pour préserver l'ordre. –