5中方式实现String反转

这里介绍Java中5中实现String反转的方式。

一、数组实现String反转

//数组实现String反转
    public String reverseByArray(){
        if(str == null || str.length() == 1){
            return null;
        }
        char[] ch = str.toCharArray();//字符串转换成字符数组
        for(int i = 0 ; i < ch.length/2 ; i++){
            char temp = ch[i];
            ch[i] = ch[ch.length-i-1];
            ch[ch.length-i-1] = temp;
        }
        return new String(ch);
    }  

二、栈实现String反转

//用栈实现String反转
    public String reverseByStack(){
        if(str == null || str.length() == 1){
            return null;
        }
        Stack<Character> stack = new Stack<Character>();
        char[] ch = str.toCharArray();//字符串转换成字符数组
        for (char c : ch) {
            stack.push(c);//每个字符,推进栈
        }
        for (int i = 0; i < ch.length; i++) {
            ch[i] = stack.pop();//移除这个堆栈的顶部对象
        }
        return new String(ch);
    }  

三、逆序遍历实现String反转

//用逆序遍历实现String反转

    public String reverseBySort(){
        if(str == null || str.length() == 1){
            return null;
        }
        StringBuffer sb = new StringBuffer();
        for (int i = str.length() -1 ; i >= 0; i--) {
            sb.append(str.charAt(i));//使用StringBuffer从右往左拼接字符
        }
        return sb.toString();
    }

四、位运算实现String反转

//使用位运算实现String反转
    public String reverseByBit() { 
        if(str == null || str.length() == 1){
            return null;
        }
        char[] ch = str.toCharArray();//字符串转换成字符数组
        int len = str.length(); 
        for(int i= 0; i< len/ 2; i++) { 
            ch[i]^= ch[len- 1- i]; 
            ch[len- 1- i]^= ch[i]; 
            ch[i]^= ch[len- 1- i]; 
        }
        return new String(ch);
    }  

五、递归实现String反转

//使用递归实现String反转
    public String reverseByRecursive(String str){
        if(str == null || str.length() == 0){
            return null;
        }
        if(str.length() == 1){
            return str;
        } else {
            //从下标为1开始截取字符串,在返回下标为0的字符
            return reverseByRecursive(str.substring(1)) + str.charAt(0);
        }
    }  

六、测试

public class Test {
    public static void main(String[] args) {
        String s = "123456";
        Reverse r = new Reverse(s);
        System.out.println(r.reverseByArray());
        System.out.println(r.reverseByStack());
        System.out.println(r.reverseBySort());
        System.out.println(r.reverseByBit());
        System.out.println(r.reverseByRecursive(s));
        
    }
} 

七、结果

八、用于String反转的全部代码

public class Reverse {
    private String str = null;
    
    public Reverse(String str){
        this.str = str;
    }
    
    //数组实现String反转
    public String reverseByArray(){
        if(str == null || str.length() == 1){
            return null;
        }
        char[] ch = str.toCharArray();//字符串转换成字符数组
        for(int i = 0 ; i < ch.length/2 ; i++){
            char temp = ch[i];
            ch[i] = ch[ch.length-i-1];
            ch[ch.length-i-1] = temp;
        }
        return new String(ch);
    }
    //用栈实现String反转
    public String reverseByStack(){
        if(str == null || str.length() == 1){
            return null;
        }
        Stack<Character> stack = new Stack<Character>();
        char[] ch = str.toCharArray();//字符串转换成字符数组
        for (char c : ch) {
            stack.push(c);//每个字符,推进栈
        }
        for (int i = 0; i < ch.length; i++) {
            ch[i] = stack.pop();//移除这个堆栈的顶部对象
        }
        return new String(ch);
    }
    //用逆序遍历实现String反转
    public String reverseBySort(){
        if(str == null || str.length() == 1){
            return null;
        }
        StringBuffer sb = new StringBuffer();
        for (int i = str.length() -1 ; i >= 0; i--) {
            sb.append(str.charAt(i));//使用StringBuffer从右往左拼接字符
        }
        return sb.toString();
    }
    //使用位运算实现String反转
    public String reverseByBit() { 
        if(str == null || str.length() == 1){
            return null;
        }
        char[] ch = str.toCharArray();//字符串转换成字符数组
        int len = str.length(); 
        for(int i= 0; i< len/ 2; i++) { 
            ch[i]^= ch[len- 1- i]; 
            ch[len- 1- i]^= ch[i]; 
            ch[i]^= ch[len- 1- i]; 
        }
        return new String(ch);
    }
    //使用递归实现String反转
    public String reverseByRecursive(String str){
        if(str == null || str.length() == 0){
            return null;
        }
        if(str.length() == 1){
            return str;
        } else {
            //从下标为1开始截取字符串,在返回下标为0的字符
            return reverseByRecursive(str.substring(1)) + str.charAt(0);
        }
    }
}   
全部代码

posted @ 2016-06-29 17:37  My_灏灏  阅读(786)  评论(0编辑  收藏  举报