首页 > 其他 > 详细

5中方式实现String反转

时间:2016-06-29 18:59:04      阅读:183      评论:0      收藏:0      [点我收藏+]

这里介绍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);
        }
    }
}   
全部代码

技术分享

5中方式实现String反转

原文:http://www.cnblogs.com/my-haohao/p/5627703.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!