字符串反轉的 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

相關文章
相關標籤/搜索