java反转字符串的几种方式

91 阅读1分钟
public class StrReverse {
    public static void main(String[] args) {
        String str = "reverseTest";
        //1.用stringBuffer或者stringBuilder自带的reverse方法
//        String s = reverseOne(str);
        //2.字符串拆分为字符数组,并且不创建额外空间
//        String s = reverseTwo(str);
        //3.StringBuffer倒序拼接
//        String s = reverseThree(str);
        //4.利用栈的先进后出
//        String s = reverseFour(str);
        //5.二分换位反转
//        String s = reverseFive(str);
        //6.切割递归反转
//        String s = reverseSix(str);
        //7.二分递归反转
        String s = reverseSeven(str);
        System.out.println(s);
    }

    private static String reverseSeven(String str) {
        if (str.length() <=1){
            return str;
        }
        String left =str.substring(0,str.length()/2);
        System.out.println(left);
        String right =str.substring(str.length()/2,str.length());
        System.out.println(right);
        return reverseSeven(right)+reverseSeven(left);
    }

    private static String reverseSix(String str) {
        if (str.length() <=1){
            return str;
        }
        String substring = str.substring(0, 1);
       return reverseSix(str.substring(1))+ substring;
    }

    private static String reverseFive(String str) {
        char[] chars = str.toCharArray();
        int start = 0;
        int end = chars.length-1;
        for (; start < end; start++ , end--) {
            //交换
            char c=chars[start];
            chars[start]=chars[end];
            chars[end]=c;
        }
        return new String(chars);
    }

    private static String reverseFour(String str) {
        StringBuffer sb = new StringBuffer();
        Stack stack = new Stack();
        for (int i = 0; i < str.length(); i++) {
            //入栈
            stack.push(str.charAt(i));
        }
        //出栈
        while (!stack.isEmpty()){
           sb.append(stack.pop()) ;
        }
        return sb.toString();
    }

    private static String reverseThree(String str) {
        StringBuffer sb = new StringBuffer();
        for (int i = str.length()-1; i >= 0; i--) {
            sb.append(str.charAt(i));
        }
        return sb.toString();
    }

    private static String reverseTwo(String str) {
        char[] chars = str.toCharArray();
        int start=0; int end=chars.length-1;
        while (start < end) {
            //一个数异或另一个数两次后,结果还为此数据;
            chars[start] ^= chars[end];
            chars[end] ^= chars[start];
            chars[start] ^= chars[end];
            start++;
            end--;
        }
        return new String(chars);
    }

    public static String reverseOne(String str) {
        return new StringBuffer(str).reverse().toString();
    }
}