将一个字符串中指定部分进行反转

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

方式一:转换为char[] 

说明:

         将字符串转换成char[],利用数组下标进行反转

代码如下:

    /**
     *
     * @param str  需要反转的数组
     * @param startIndex  开始反转的位置
     * @param endIndex    结束反转的位置
     * @return
     */
         public String reverse(String str,int startIndex,int endIndex){

             if(str!=null){
                 //1.将字符串转换成数组
                 char[] arr = str.toCharArray();

                 //2.反转
                 for(int x=startIndex,y=endIndex; x<y; x++,y--){
                     char temp =  arr[x];
                     arr[x]=arr[y];
                     arr[y]=temp;
                 }

                 return new String(arr);
             }

             return null;
         }

方式二:使用String的拼接

说明:

        利用String的substring() 将字符串分为3个部分,先取第一部分然后拼接上需要反转的部分(需要反转的部分我们倒着把每一个字符取下来拼接上),最后取第三个部分,连接起来。

代码如下:

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

               return reverseStr ;
           }

                 return null;
        }

方式三:方式二的改进

使用StringBuffer/StringBuilder替换Strin

说明:
         因为String的不可变性,我们每一次拼接都需要在常量池中重新开辟空间,这样浪费内存,所以我们使用StringBuff来做。(思路与方式二相同)

代码如下:

public String reverse2(String str,int startIndex,int endIndex){
          if(str!=null){
              StringBuffer buffer = new StringBuffer(str.length());

              //第一部分:
              buffer.append(str.substring(0,startIndex));

              //第二部分:
              for(int i = endIndex;i >= startIndex;i--){
                  buffer.append(str.charAt(i));
              }
              //第三部分:
              buffer.append(str.substring(endIndex+1));

              return buffer.toString();
          }
          return null;
        }

测试:

    @Test
    public void test3(){
        String str ="abdcefg";
        String reverse = reverse2(str, 2, 5);
        System.out.println(reverse);//abfecdg
    }

结果如下:

 


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

平胸瑶女神

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

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

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

打赏作者

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

抵扣说明:

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

余额充值