Java最新使用位运算、值交换等方式反转java字符串-共四种方法,字节跳动Java高级工程师

最后

面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?

掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取


在Java中,我们可以使用StringBuilder(str).reverse()使字符串字母倒序。


public class ReverseString1 {



    public static void main(String[] args) {



        String str = "Reverse a String in Java";



        StringBuilder sb = new StringBuilder(str).reverse();



        System.out.println(sb.toString());



    }

}



输出结果


avaJ ni gnirtS a esreveR



2.char[]


首先,我们将字符串转换为char数组,并逐个循环char数组,并使用temp变量交换值。


public class ReverseString2 {



    public static void main(String[] args) {



        String str = "Hello World";

        System.out.println(reverse(str));         //  dlroW olleH



    }



    public static String reverse(String input) {



        if (input == null || input.length() < 0)

            throw new IllegalArgumentException("Please provide an input!");



        char[] result = input.toCharArray();



        int startIndex = 0;

        int endIndex = result.length - 1;

        char temp;



        for (; endIndex > startIndex; startIndex++, endIndex--) {

            temp = result[startIndex];

            result[startIndex] = result[endIndex];

            result[endIndex] = temp;

        }



        return new String(result);

    }



}



上面的算法需要5个循环(长度/ 2)来使字符串倒序“ Hello World”。


------------------------------------

H  e  l  l  o     W  o  r  l  d

------------------------------------

0  1  2  3  4  5  6  7  8  9  10

------------------------------------



Loop #1 - Swap index 0 <-> index 10

------------------------------------

{d}  e  l  l  o     W  o  r  l  {H}

------------------------------------

{0}  1  2  3  4  5  6  7  8  9  {10}

------------------------------------



Loop #2 - Swap index 1 <-> index 9

------------------------------------

d  {l}  l  l  o     W  o  r  {e}  H

------------------------------------

0  {1}  2  3  4  5  6  7  8  {9}  10

------------------------------------



Loop #3 - Swap index 2 <-> index 8

------------------------------------

d  l  {r}  l  o     W  o  {l}  e  H

------------------------------------

0  1  {2}  3  4  5  6  7  {8}  9  10

------------------------------------



Loop #4 - Swap index 3 <-> index 7

------------------------------------

d  l  r  {o}  o     W  {l}  l  e  H

------------------------------------

0  1  2  {3}  4  5  6  {7}  8  9  10

------------------------------------



Loop #5 - Swap index 4 <-> index 6

------------------------------------

d  l  r  o  {W}     {o}  l  l  e  H

------------------------------------

0  1  2  3  {4}  5  {6}  7  8  9  10

------------------------------------



3. Byte[] – StringBuilder(str).reverse(str)


以下代码段类似于StringBuilder(str).reverse()的内部实现(UTF16内容除外)。


import java.nio.charset.StandardCharsets;



public class ReverseString3 {



    public static void main(String[] args) {



        String str = "Hello World";

        System.out.println(reverse(str));



    }



    public static String reverse(String input) {



        if (input == null || input.length() < 0)

            throw new IllegalArgumentException("Please provide an input!");



        byte[] val = input.getBytes(StandardCharsets.UTF_8);

        int length = val.length - 1;



        for (int start = (length - 1) >> 1; start >= 0; start--) {

            int end = length - start;

            byte temp = val[start];

            val[start] = val[end];

            val[end] = temp;



            // debugging

            //System.out.println(String.format("start=%s, end=%s", start, end));

        }



        return new String(val);

    }



}



最令人困惑的部分是右移运算符(length - 1) >> 1,这是什么意思?查看下面的8位示例,您可以找到规律吗?


System.out.println(10>>1);  //  10 -> 5

0000 1010   = 10

0000 0101|0 = 10 >> 1 = 5



System.out.println(4>>1);   //  4 -> 2

0000 0100   = 4

0000 0010|0 = 4 >> 1 = 2



System.out.println(100>>1); //  100 -> 50

0110 0100   = 100

00110 010|0 = 100 >> 1 = 50



System.out.println(7>>1);   //  7 -> 3

0000 0111   = 7

0000 0011|1 = 7 >> 1 = 3



对于数字,每右移1位,金额将减少该值的一半并四舍五入。这(length - 1) >> 1试图找出字符串的中间点。


number >> 1 = round_down(number/2) or Math.flooa(number/2)



值交换从内部开始,然后扩展到外部。


for (int start = (length - 1) >> 1; start >= 0; start--) {

    int end = length - start;

    byte temp = val[start];

    val[start] = val[end];



# 《MySql面试专题》

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/9181d8982b73222618079c8760dfd7ec.webp?x-oss-process=image/format,png)

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/f3911ce96d24626272104d67c3c7318b.webp?x-oss-process=image/format,png)

# 《MySql性能优化的21个最佳实践》

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/4f74c816eb34d0132e90744471dbf814.webp?x-oss-process=image/format,png)

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/aeea0920787714e589bb74cd70333968.webp?x-oss-process=image/format,png)

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/6ad90e742202ad72de7d16a218e724ec.webp?x-oss-process=image/format,png)

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/8d83775083e898c3199c9991a295ed85.webp?x-oss-process=image/format,png)

# 《MySQL高级知识笔记》

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/bab10f71d2ea99f8f3cbc370ca56649f.webp?x-oss-process=image/format,png)

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/be7e49f1a7321fe4571d90eb7dec2363.webp?x-oss-process=image/format,png)

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/ec1bd6c8f0f5c98da05691b515ec7865.webp?x-oss-process=image/format,png)

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/de65df0d2c6918f9c9fed403ced76268.webp?x-oss-process=image/format,png)

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/996f1365bb1c7ec2f200332e1eb65f3c.webp?x-oss-process=image/format,png)

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/b84c8c3f3fc31f02db8a21b4afeb5d40.webp?x-oss-process=image/format,png)

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/5f627821e93cb37aa89dc0575ae74f30.webp?x-oss-process=image/format,png)

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/842d54ab016d135708917f2dacd01969.webp?x-oss-process=image/format,png)

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/a73fb6acc7df0083cfb99d54ba783645.webp?x-oss-process=image/format,png)

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/8fb8f908937d00499391b09823da5303.webp?x-oss-process=image/format,png)

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/6d0769613bc3ceded87a7146516a5f3b.webp?x-oss-process=image/format,png)

**关注我,点赞本文给更多有需要的人**

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

24655481)]

[外链图片转存中...(img-beHWx3jO-1715424655481)]

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

[外链图片转存中...(img-tkO7YVmt-1715424655481)]

**关注我,点赞本文给更多有需要的人**

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值