每日算法(6)——字符串逆序输出

本文介绍了六种在Java中实现字符串逆序的方法:使用StringBuffer的reverse()方法、字符数组转换及逆序输出、数组元素交换、正序插入、栈的特性以及递归方式,并提供了详细的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Java函数实现字符串逆序输出的几种方法

(1)使用StringBuffer类中的reverse()方法将字符串逆序;
(2)利用String类中的toCharArray()转换成字符数组,然后逆序输出数组;
(3)利用String类中的toCharArray()转换成字符数组,将数组二分并交换两边的字符;
(4)遍历字符串,从头部开始逐个正序放入字符串中;
(5)利用栈的先入后出的特性实现字符串的逆序;
(6)通过递归实现字符串的逆序。

2、具体代码

package com.peter.algorithm.other;

import org.junit.Test;
import java.util.Stack;

public class StringReverse {
    @Test
    public void test() {
        String originStr = ".trats ot detnaw uoy yhw nosaer eno taht fo kniht pu evig ot tuoba era uoy nehW";
        //String originStr = "。始开要想么什为你想想,候时的弃放要想你当";
        System.out.println(reverseByStringBuffer(originStr));
        System.out.println(reverseByCharArray(originStr));
        System.out.println(reverseBySwapChar(originStr));
        System.out.println(reverseByInsertFront(originStr));
        System.out.println(reverseByStack(originStr));
        System.out.println(reverseByRecursion(originStr));
    }

    public static String reverseByStringBuffer(String originStr) {
        if (originStr == null || originStr.isEmpty()) {
            throw new IllegalArgumentException("Illegal string!");
        }
        StringBuffer stringBuffer = new StringBuffer(originStr);
        return stringBuffer.reverse().toString();
    }

    public static String reverseByCharArray(String originStr) {
        if (originStr == null || originStr.isEmpty()) {
            throw new IllegalArgumentException("Illegal string!");
        }
        StringBuffer stringBuffer = new StringBuffer();
        char[] originChar = originStr.toCharArray();
        for (int i = originChar.length - 1; i >= 0; i--) {
            stringBuffer.append(originChar[i]);
        }
        return stringBuffer.toString();
    }

    public static String reverseBySwapChar(String originStr) {
        if (originStr == null || originStr.isEmpty()) {
            throw new IllegalArgumentException("Illegal string!");
        }
        char[] originChar = originStr.toCharArray();
        int len = originChar.length;
        int middle = len >>> 1;
        for (int i = 0; i < middle; i++) {
            char temp = originChar[i];
            originChar[i] = originChar[len - i - 1];
            originChar[len - i - 1] = temp;
        }
        return new String(originChar);
    }

    public static String reverseByInsertFront(String originStr) {
        if (originStr == null || originStr.isEmpty()) {
            throw new IllegalArgumentException("Illegal string!");
        }
        StringBuffer stringBuffer = new StringBuffer();
        int len = originStr.length();
        for (int i = 0; i < len; i++) {
            stringBuffer.insert(0, originStr.charAt(i));
        }
        return stringBuffer.toString();
    }

    public static String reverseByStack(String originStr) {
        if (originStr == null || originStr.isEmpty()) {
            throw new IllegalArgumentException("Illegal string!");
        }
        StringBuffer stringBuffer = new StringBuffer();
        Stack<Character> stack = new Stack<>();
        int len = originStr.length();
        //入栈
        for (int i = 0; i < len; i++) {
            stack.push(originStr.charAt(i));
        }
        //出栈
        for (int i = 0; i < len; i++) {
            stringBuffer.append(stack.pop());
        }
        return stringBuffer.toString();
    }

    public static String reverseByRecursion(String originStr) {
        if (originStr == null || originStr.isEmpty()) {
            throw new IllegalArgumentException("Illegal string!");
        }
        if (originStr.length() == 1) {
            return originStr;
        }
        int len = originStr.length();
        return reverseByRecursion(originStr.substring(1, len)) + originStr.charAt(0);
    }
}

3、测试结果

origin stringtarget string
.trats ot detnaw uoy yhw nosaer eno taht fo kniht pu evig ot tuoba era uoy nehWWhen you are about to give up think of that one reason why you wanted to start.
。始开要想么什为你想想,候时的弃放要想你当当你想要放弃的时候,想想你为什么想要开始。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值