Java实现字符串反转

一、JDK封装方法实现

java.lang.AbstractStringBuilder的reverse()方法
java.lang.StringBuffer线程安全【synchronized实现同步方法】

public static String reverseByJDK(String str) {
    if (str == null || str.length() == 0) {
        return null;
    }
    return new StringBuffer(str).reverse().toString();
}

二、数组实现String反转

常规方法,前后对称位置交换

public static String reverseByArray(String str) {
    if (str == null || str.length() == 0) {
        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反转

数据结构栈的Java实现类java.util.Stack
栈 last-in-first-out(LIFO)

public static String reverseByStack(String str) {// LIFO
    if (str == null || str.length() == 0) {
        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 static String reverseBySort(String str) {
    if (str == null || str.length() == 0) {
        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 static String reverseByBit(String str) {
    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 static 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);
    }
}

参考文档:
1. http://www.jb51.net/article/87669.htm

猜你喜欢

转载自blog.csdn.net/thebigdipperbdx/article/details/79900220