反转字符串

在慕课网看到的一篇手记,总结的非常好,然后我学习了其中三个方式来实现反转字符串;理解完毕后再自己敲一遍,get到不少技能啊。学无止境,加油!!
这里就直接贴代码,解释都在代码里的注释里了哈。欢迎大家指出不好的地方以促进学习。
1、常规方法:

package zyf;
public class StrReverseWithArray {
    /*
     * 将字符串转换为char数组
     * 遍历循环给char数组赋值*/
    public  String strReverseWithArray(String string){
        if(string==null||string.length()==0) return string;
        int len=string.length();//获取字符串长度
        char[] arr=string.toCharArray();//创建char数组
        //优化,不需循环多次,每次循环时直接给前后位置赋值
        for(int i=0;i<len/2;i++){
            //从字符串尾端向前遍历并赋值给char数组
            //优化:将最后一个字符赋值给arr数组第一个位置
            arr[i]=string.charAt(len-1-i);
            //优化:将第一个字符赋值给arr数组的最后一个位置
            arr[len-1-i]=string.charAt(i);
        }
        return new String(arr);     
    }
    public static void main(String[] args) {
        StrReverseWithArray swa=new StrReverseWithArray();
        String str=swa.strReverseWithArray("Hello World!");
        System.out.println("###输出结果:"+str);
    }
}

2、通过栈的LIFO的方法:

package zyf;

import java.util.Stack;

public class StrReverseWithStack {
/*
 * 使用后进先出(LIFO)
 * 将字符串转换为char数组
 * 将char数组中的字符串依次压入栈中
 * 将栈中的字符串一次弹出赋值给char数组*/
    public String strReverseWithStack(String str){
        if(str==null||str.length()==0) return str;
        //创建栈实例
        Stack<Character> strStack=new Stack<>();
        // 将字符串转换为char数组
        char[] arr=str.toCharArray();
        //遍历数组并将数组中的字符依次压入栈
        for(Character c:arr){
            strStack.push(c);
        }
        int len=str.length();
        //将栈中字符取出来赋值给arr
        for(int i=0;i<len;i++){
            arr[i]=strStack.pop();
        }
        return new String(arr);
    }
    public static void main(String[] args) {
        StrReverseWithStack swa=new StrReverseWithStack();
        String str=swa.strReverseWithStack("Hello World!I Love You So Much!");
        System.out.println("###输出结果:"+str);

    }

}

3、逆序方法:

package zyf;

public class StrReverseWithReverseLoop {
/*
 * 逆序遍历字符串中的字符,并将它依次添加到StringBuilder中*/
    public String strReverseWithReverseLoop(String str){
        if(str==null||str.length()==0) return str;
        StringBuilder sb=new StringBuilder();
        //倒序遍历字符串
        for(int i=str.length()-1;i>=0;i--){
            //将字符串表示形式追加到sb序列
            sb.append(str.charAt(i));
        }
        return sb.toString();
    }
    public static void main(String[] args) {
        StrReverseWithReverseLoop swa=new StrReverseWithReverseLoop();
        String str=swa.strReverseWithReverseLoop("Hello World!I Love You So Much!");
        System.out.println("###输出结果:"+str);

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值