1. 程式人生 > >Java實現字串反轉

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();
}

二、陣列實現

常規方法,前後對稱位置交換

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); }

三、棧實現

資料結構棧的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); }

四、逆序遍歷實現

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();
}

五、位運算實現

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);
}

六、使用遞迴實現

遞迴呼叫方法

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);
    }
}