zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    }   
    全部代码

  • 相关阅读:
    Andio Studio
    Git常用操作汇总(转)
    1.主动学习很重要,主动学习很重要,主动学习很重要 2.官方文档 3.实践(转)
    Android应用程序的组成部分和Manifest文件(转)
    BackTrack5 (BT5)无线password破解教程之WPA/WPA2-PSK型无线password破解
    JS window.open()属性
    js产生随机数
    Node.js新手教程——怎样实现文件上传功能
    EJB究竟是什么,真的那么神奇吗??
    排序(4)---------希尔(shell)排序(C语言实现)
  • 原文地址:https://www.cnblogs.com/my-haohao/p/5627703.html
Copyright © 2011-2022 走看看