2017-06-19 44 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

这很好 –