1.java中String倒置输出

(1)使用JDK中的API

StringBuffer  reverse();

例子:

 

String  c_str = "ABCD";
  c_str = new StringBuffer(c_str).reverse().toString();
  输出:c_str 为 “DCBA”

备注:该StringBuffer函数是线程安全的

StringBuilder  reverse();

  同StringBuffer 的使用,并且运行效率更高,但是在多线程中不安全,建议使用StringBuffer  

(2)字符反转的方式

使用字符串中单个取字符的方式

String c_str = "ABCD";
  char[] ch = new char[c_str.length()];
  for(int i = c_str.length()-1 ;i >= 0;i--)
  {
    ch[c_str.length()-1-i] = c_str.charAt(i);
  }
  c_str  =  new String(ch);
  输出:c_str 为  "DCBA"

(2)递归的方式

String c_str = "ABCD";
  char[] s = c_str.toCharArray();
  或者byte[] s =c_str.getBytes(); //后续需要改成byte返回
  String out_str = new  String(Reverse_Recursion(0,s));
  输出:out_str 为 “DCBA”
public static char[] Reverse_Recursion(int i,char source[])
{
  if(source.length / 2 == i)
  {
    return source;
  }
  char t = source[i];
  source[i] = source[source.length - 1 -i];
  source[source.length - 1 -i] = t;
  I++;
  return  Reverse_Recursion(i,source);
}

最好使用char [] 作为返回值,c_str.charAt(i) 对其赋值没有意义

可以通过链接的方式,按照char[]从末尾到头的递归调用

(3)空间辅助栈的方式

类:import  java.util.Stack;

 

String c_str = "ABCD";
  char[] s = c_str.toCharArray();
  Stack<Character> stack  =  new  Stack<Character>();
  for(int i = 0;i <s.length;i++)
  {
    stack.push(s[i]);
  }
  String  out_str = "";
  for(int j = 0;j < s.length;j++)
  {  
    out_str += stack.pop();
  }
  输出:out_str 为 “DCBA”
(4)异或的方式
String c_str = "ABCD";
  char[] s = c_str.toCharArray();
  int  begin = 0;
  int  end = s.length - 1;
  while(begin < end)
  {
    s[begin] = (char)(s[begin] ^ s[end]);
    s[end]   =  (char)(s[begin]  ^  s[end]);
    s[begin] =  (char)(s[begin] ^ s[end]);
    begin++;
    end--;
  }
  out_str = new String(s);
  输出:out_str 为 “DCBA”