当年面试,面试官问了关于对一个字符串进行反转操作,有几种思路。当时只答了一种........
特意搜集整理了一下,不足之处,批评指正。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Stack;
import java.util.ArrayDeque;
class StringReverse
{
public static void main(String[] args)
{
StringReverse sr = new StringReverse();
//获取控制台输入
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String str = null;
try
{
str = in.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
//str = sr.reverseString_1(str);//利用StringBuffer的reverse方法.
//str = sr.reverseString_2(str);
//str = sr.reverseString_3(str);
//str = sr.reverseString_4(str);
//str = sr.reverseString_5(str);
//str = sr.reverseString_6(str);
//str = sr.revereString_7(str);
str = sr.reverseString_8(str);
System.out.println("输出:"+str);
}
//一 利用StringBuffer的reverse方法.
public String reverseString_1(String str){
StringBuffer sb = new StringBuffer(str);
return sb.reverse().toString();
}
//二 自己实现StringBuffer的reverse方法
public String reverseString_2(String str){
int len = str.length();
StringBuffer sb = new StringBuffer(len);
for(int i = len-1;i>=0;i--){
sb.append(str.charAt(i));
}
return sb.toString();
}
//三 将字符串用toCharArray()转成字符数组,自尾到头遍历
public String reverseString_3(String str){
char[] chs = str.toCharArray();
String reverse = "";
for(int i = chs.length-1;i >=0; i--){
reverse +=chs[i];
}
return reverse;
}
//四 自头遍历字符串中的字符
public String reverseString_4(String str){
int len = str.length();
String reverse = "";
for(int i = 0; i<len; i++){
reverse = str.charAt(i) + reverse;
}
return reverse;
}
//五 将字符串转成字符数组,首尾互换
public String reverseString_5(String str){
int len = str.length() - 1;
int halflen = len / 2;
char[] chs = str.toCharArray();
char tmp;
for(int i = 0; i < halflen; i++){
tmp = chs[i];
chs[i] = chs[len - i];
chs[len-i] = tmp;
}
return new String(chs);
}
//六 字符串转成字符数组,遍历数组,首尾异或
public String reverseString_6(String str){
int begin = 0;
int end = str.length() - 1;
char[] chs = str.toCharArray();
while(begin < end){
chs[begin] =(char) (chs[begin] ^ chs[end]);
chs[end] = (char)(chs[begin] ^ chs[end]);
chs[begin] = (char)(chs[end] ^ chs[begin]);
begin++;
end--;
}
return new String(chs);
}
//利用java.util包中的Stack类,先遍历字符串中各个字符,压入栈,然后取出
//jdk1.6开始,此类被ArrayDeque取代
public String revereString_7(String str){
Stack<Character> stack = new Stack<Character>();
String reverse = "";
for(int i = 0; i < str.length(); i++){
stack.push(str.charAt(i));
}
while(!stack.empty())
reverse+=stack.pop();
return reverse;
}
//利用java.util包中的ArrayDeque类
public String reverseString_8(String str){
ArrayDeque<Character> ad = new ArrayDeque<Character>(str.length());
String reverse = "";
for(int i=0; i<str.length(); i++){
ad.push(str.charAt(i));
}
while(!ad.isEmpty()){
reverse+=ad.pop();
}
return reverse;
}
//递归实现
public String reverseString_9(String str){
int len = str.length();
if(len <= 1)
return str;
String left = str.substring(0,len/2);
String right = str.substring(len/2,len);
return reverseString_9(right)+reverseString_9(left);
}
}