2017-06-19 81 views
-4

我需要創建輸入將是字符串的方法,例如:asd321tre2。 輸出應該是:eas321dtr2。字符應該向前移動一個位置,但數字應保持在同一位置。 輸入:字符串s1 =「abc23sd23」; 輸出:字符串s2 =「dab23cs23」;在字符串中移動字符而忽略編號

public static String revertTheString (String s) { 
    String helper = s.replaceAll("\\d", ""); 
    helper = helper.substring(helper.length()-1) + helper.substring(0, helper.length()-1); 
    int start = 0, end = 0; 

    StringBuilder revert = new StringBuilder(s); 

    for (int i = 0; i< s.length(); i++) { 
     if(Character.isDigit(s.charAt(i))){ 
      end = i; 
      revert = revert.replace(start, end, helper.substring(start, end)); 
      while(Character.isDigit(s.charAt(i))){ 
       i++; 
       start = i; 
      } 
     } 
    } 
    return revert.toString(); 
} 
+2

告訴我們您的代碼,請 – haifzhan

+0

[歡迎的StackOverflow(https://stackoverflow.com/tour)。請閱讀我們的[問]頁面提示如何改善您的 問題。好的問題往往會從社區中產生更快,更好的答案。 – ochi

回答

1

您可以嘗試交換如下所示的第一個和最後一個字符值。

===========================================

String s = "asd321tre2"; 
    char[] charr = s.toCharArray(); 
    int end = 0; 

    for (int i = s.length(); i <= 0; i--) { 
     if (Character.isLetter(charr[i])) { 
      end = i; 

     } 
    } 
    String output = charReplace(end, charr); 
} 

private static String charReplace(int end, char[] ch) { 

    for (int i = 0; i < ch.length; i++) { 
     if (Character.isLetter(ch[i])) { 
      char tmp = ch[i]; 
      ch[i] = ch[end]; 
      ch[end] = tmp; 
     } 
    } 
    String output = String.valueOf(ch); 
    return output; 

} 

===========================================

希望這有助於。

感謝, Parthiban

+0

這很好 –