字符串反转的 Java 方法

package cglib;java

import java.util.Stack;数组

public class Reverse {app

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        System.out.println("数组首位调换方法一输出:"+reverse1("傻瓜大傻瓜"));
        System.out.println("递归方法二输出:"+reverse2("123456"));
        System.out.println("StringBuffer方法三输出:"+reverse3("白痴大白痴"));
        System.out.println("栈方法四输出:"+reverse4("帅极了"));
        System.out.println("使用StringBuffer的append方法五输出:"+reverse5("大师哥"));
        System.out.println("StringBuffer使用StringBuffer的setCharAt方法六输出:"+reverse6("李易峰"));
    }递归

    // 方法一:直接使用数组首位调换,放到另外的数组中
    public static String reverse1(String str){
        if(str==null||str.length()<2){
            return str;
        }
        
        char[] arry=str.toCharArray();
        char[] reverseArray=new char[arry.length];
        for(int i=0;i<arry.length;i++){
            reverseArray[arry.length-i-1]=arry[i];
        }
        return new String(reverseArray);
        
        
    }
    // 巧妙使用递归的方式,把字符串的第一位挪到最后。配合
    //reverseString(s.substring(1))递归调用,每次都把字符串的第一位挪到最后。直到递归的参数只剩下一个字符为止。  
    
    public static String reverse2(String str) {
        //System.out.println(str);
        //System.out.println(str.substring(1));
        //System.out.println(str.charAt(0));
        if (str == null || str.length() <2) {  
            return str;  
        }  
        return reverse2(str.substring(1))+str.charAt(0);  
    }  
    // 借助其余包含反转方法的类  
    public static String reverse3(String str) {  
        if (str == null || str.length() <2) {  
            return str;  
        }  
        StringBuffer array = new StringBuffer(str) ;
        System.out.println("方法三:"+array);
        array=array.reverse();
        return array.toString();
    }
    
    public static String reverse4(String str) {  
        if (str == null || str.length() <2) {  
            return str;  
        }  
        String result="";
        char[] array=str.toCharArray();
        Stack<Character> stack = new Stack<>();
        
        for(char a:array){
            stack.push(a);
        }
        int length = stack.size(); //注意这个地方必需要先把length暂存起来,由于在遍历的过程当中,pop()堆的时候,会改变堆的大小,//注意这个地方必需要先把length暂存起来,由于在遍历的过程当中,pop()堆的时候,会改变堆的大小。stack.size()会变化,不能做为条件 。或者用str.length做为条件
        for(int i=0;i<length;i++){
            result+=stack.pop();
        }
        
        return result;  
    }  
    public static String reverse5(String str) {  
        if (str == null || str.length() <2) {  
            return str;  
        }  
        StringBuffer array = new StringBuffer(str.length()) ;
        //System.out.println("方法五:"+array);
        for(int i=str.length()-1;i>=0;i--){
            //System.out.println("i="+i);
            //System.out.println("str.charAt(i):"+str.charAt(i));
            array.append(str.charAt(i));
            //System.out.println("array:"+array);
        }
        
        return array.toString();
    }
    public static String reverse6(String str) {  
        if (str == null || str.length() <2) {  
            return str;  
        }  
        StringBuffer array = new StringBuffer(str) ;字符串

        for (int i = 0; i < (str.length() / 2); i++) {  
            int swapIndex = str.length() - 1 - i;
            System.out.println("swapIndex:"+swapIndex);
            char swap = array.charAt(swapIndex);
            System.out.println("swap:"+swap);
            array.setCharAt(swapIndex, array.charAt(i));
            System.out.println("array:"+array);
            System.out.println("i:"+i);
            array.setCharAt(i, swap);
            System.out.println("array="+array);
        }  
        
        return array.toString();
    }
}string

输出:class

数组首位调换方法一输出:瓜傻大瓜傻
递归方法二输出:654321
方法三:白痴大白痴
StringBuffer方法三输出:痴白大痴白
栈方法四输出:了极帅
使用StringBuffer的append方法五输出:哥师大
swapIndex:2
swap:峰
array:李易李
i:0
array=峰易李
StringBuffer使用StringBuffer的setCharAt方法六输出:峰易李import

相关文章
相关标签/搜索