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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值