字符串反转的 Java 方法

本文介绍了五种不同的Java字符串反转方法,包括使用数组首位调换、递归方式、StringBuffer类、栈以及StringBuffer的特定方法实现字符串反转的过程及输出结果。

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

package cglib;

import java.util.Stack;

public class Reverse {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        System.out.println("数组首位调换方法一输出:"+reverse1("傻瓜大傻瓜"));
        System.out.println("递归方法二输出:"+reverse2("123456"));
        System.out.println("StringBuffer方法三输出:"+reverse3("白痴大白痴"));
        System.out.println("栈方法四输出:"+reverse4("帅极了"));
        System.out.println("使用StringBuffer的append方法五输出:"+reverse5("大师哥"));
        System.out.println("StringBuffer使用StringBuffer的setCharAt方法六输出:"+reverse6("李易峰"));
    }

    // 方法一:直接使用数组首位调换,放到另外的数组中
    public static String reverse1(String str){
        if(str==null||str.length()<2){
            return str;
        }
        
        char[] arry=str.toCharArray();
        char[] reverseArray=new char[arry.length];
        for(int i=0;i<arry.length;i++){
            reverseArray[arry.length-i-1]=arry[i];
        }
        return new String(reverseArray);
        
        
    }
    // 巧妙使用递归的方式,把字符串的第一位挪到最后。配合
    //reverseString(s.substring(1))递归调用,每次都把字符串的第一位挪到最后。直到递归的参数只剩下一个字符为止。  
    
    public static String reverse2(String str) {
        //System.out.println(str);
        //System.out.println(str.substring(1));
        //System.out.println(str.charAt(0));
        if (str == null || str.length() <2) {  
            return str;  
        }  
        return reverse2(str.substring(1))+str.charAt(0);  
    }  
    // 借助其他包含反转方法的类  
    public static String reverse3(String str) {  
        if (str == null || str.length() <2) {  
            return str;  
        }  
        StringBuffer array = new StringBuffer(str) ;
        System.out.println("方法三:"+array);
        array=array.reverse();
        return array.toString();
    }
    
    public static String reverse4(String str) {  
        if (str == null || str.length() <2) {  
            return str;  
        }  
        String result="";
        char[] array=str.toCharArray();
        Stack<Character> stack = new Stack<>();
        
        for(char a:array){
            stack.push(a);
        }
        int length = stack.size(); //注意这个地方必须要先把length暂存起来,因为在遍历的过程中,pop()堆的时候,会改变堆的大小,//注意这个地方必须要先把length暂存起来,因为在遍历的过程中,pop()堆的时候,会改变堆的大小。stack.size()会变化,不能作为条件 。或者用str.length作为条件
        for(int i=0;i<length;i++){
            result+=stack.pop();
        }
        
        return result;  
    }  
    public static String reverse5(String str) {  
        if (str == null || str.length() <2) {  
            return str;  
        }  
        StringBuffer array = new StringBuffer(str.length()) ;
        //System.out.println("方法五:"+array);
        for(int i=str.length()-1;i>=0;i--){
            //System.out.println("i="+i);
            //System.out.println("str.charAt(i):"+str.charAt(i));
            array.append(str.charAt(i));
            //System.out.println("array:"+array);
        }
        
        return array.toString();
    }
    public static String reverse6(String str) {  
        if (str == null || str.length() <2) {  
            return str;  
        }  
        StringBuffer array = new StringBuffer(str) ;

        for (int i = 0; i < (str.length() / 2); i++) {  
            int swapIndex = str.length() - 1 - i;
            System.out.println("swapIndex:"+swapIndex);
            char swap = array.charAt(swapIndex);
            System.out.println("swap:"+swap);
            array.setCharAt(swapIndex, array.charAt(i));
            System.out.println("array:"+array);
            System.out.println("i:"+i);
            array.setCharAt(i, swap);
            System.out.println("array="+array);
        }  
        
        return array.toString();
    }
}

输出:

数组首位调换方法一输出:瓜傻大瓜傻
递归方法二输出:654321
方法三:白痴大白痴
StringBuffer方法三输出:痴白大痴白
栈方法四输出:了极帅
使用StringBuffer的append方法五输出:哥师大
swapIndex:2
swap:峰
array:李易李
i:0
array=峰易李
StringBuffer使用StringBuffer的setCharAt方法六输出:峰易李

 

转载于:https://my.oschina.net/u/2822116/blog/780518

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值