2017-10-08 60 views
0

我的代碼給我輸出像#check ## done654321 但我想要使用遞歸的「#check ## done123456」。輸入字符串是replaceD(「123#check#456#done」)。 我該如何做?是否有可能。使用遞歸移動字符串末尾的所有數字

 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

它仍然會給出相同的輸出。 –

+0

您的輸入螞蟻預期輸出是什麼?請發佈幾個例子。 – Steampunkery

回答

0

使用遞歸

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

應用迭代

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

訂單是否需要保留或是否需要排序。如果它只是要保存的順序,請刪除排序並直接添加str2。

代碼進行排序下面給出

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

輸入字符串是replaceD(「12ab45」)。只有一個參數作爲字符串。 –

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

這樣好嗎?它會工作 –

+0

它也會給非數字字符?例如,如果輸入字符串是12ab34.it應該給我「ab1234」。 –

+0

是的,由於遞歸使用堆棧。總是從最後開始維護秩序。 –