将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反 转为”abfedcg”

本文介绍三种实现字符串局部反转的方法,包括转换为字符数组、使用String拼接及StringBuilder替换String。每种方法都附带详细的实现思路和代码示例。

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

将一个字符串进行反。将字符串中指定部分进行反转。比如“abcdefg”反 转为”abfedcg”


题目:将一个字符串进行反转,比如“abcdefg”反 转为”abfedcg” ,指转换指定部分,而不是整个字符串一起反转。

PS:以下讲解了三个方法并且附加详细思路,一个⭕️为一个方法


⭕️:方法一:转换为char[]数组

思想:调用toCharArray()方法转换为会char数组,然后进行需要反转元素的元素首尾互换(参考冒泡排序交换元素的方法),交换完了之后再调用String的构造器转换回String,返回即可

public String reverse(String string,int startIndex,int endIndex){
    if (string!=null){
        char[] c1 = string.toCharArray();//转换为char[]数组
        for (int x = startIndex,y=endIndex;x<y ; x++,y--) {
            char temp=c1[x];
            c1[x]=c1[y];
            c1[y]=temp;
        }
        return new String(c1);
    }
    return null;
}

⭕️:方法二:使用String的拼接操作

思想:把整体分为三部分,第一部分取出不变,第二部分(需要反转的部分)for反向循环用String的拼接,拼接到第一部分,第三部分直接拼接,拼接完了返回即可

public String reverse1(String string,int startIndex,int endIndex){
    if (string!=null){
        //第一部分
        String s1 = string.substring(0, endIndex);
        //第二部分
        for (int i = endIndex; i >=startIndex ; i--) {
            s1=s1+s1.charAt(i);
        }
        //第三部分
        s1=s1+string.substring(endIndex+1);
        return s1;
    }
    return null;
}

⭕️:方法三:使用StringBuffer/StringBuilder替换String

可参考文章

  1. String、StringBuffer、StringBuilder三者有什么不同?:这里选择StringBuffer/StringBuilder去替换String,就考虑是否有多线程问题,这里不涉及多线程所以选StringBuilder
  2. Java中StringBuffer常用方法有那些?:这里介绍了StringBuffer的常用方法,StringBuilder几乎差不多
  3. String、StringBuffer、StringBuilder之间要如何转换?:该文详细讲解了String 、StringBuffer 、StringBuilder三者之间要怎么互换

代码解释以及注意点

  1. 第二部分用for反向循环来拼接时,比方法二效率高很多,因为StringBuilder具有可变性,都是在原有的字符串进行操作,而String具有不可变性,每次都是新建一个字符串
  2. StringBuilder sb1 = new StringBuilder(string.length());这里之所以没有直接写string,因为一开始就定义了一样的长度,就省去了后面的扩容操作,因为StringBuilder默认是16位,输入长度多了要扩容,详情见参考文章第二个。(并不是每一个客户输入的字符串都像敲代码举例子那样子只输入几个字符串而已)
  3. 要知道substring方法的“左闭右开”原则。详情也看参考文章第二个,有具体讲解substring方法

代码部分

public String reverse3(String string,int startIndex,int endIndex){
    if(string!=null){
        StringBuilder sb1 = new StringBuilder(string.length());
        //1.把String的第一部分转换为StringBuilder类型为s1
        StringBuilder s1 = sb1.append(string.substring(0,startIndex));
        //2.把反转的部分反向循环一个个用String的charAt方法拼接到第一部分(效率更高)
        for (int i = endIndex; i >=startIndex ; i--) {
            s1.append(string.charAt(i));//
        }
        //3.把剩余部分拼接到s1上,至始至终都是在对StringBuilder型s1进行操作,这是因为StringBuilder具有可变性
        s1.append(string.substring(endIndex+1));

        return s1.toString();
    }
    return null;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金士曼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值