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”