Java字符串中指定部分反转的三种方式

 更新时间:2022年01月04日 15:14:59   作者:我不是伟人0  
一些面试官可能在面试Java基础的时候,让你说一下字符串反转,会手撕代码,所以下面这篇文章主要给大家介绍了关于Java字符串中指定部分反转的三种方式,需要的朋友可以参考下

将“asdfghj”反转为“ashgfdj”

方式一:把字符串转化为char[]

调用String类中toCharArray()方法把字符串转化为字符,而后开始时索引和结束时索引利用for()循环反转指定字符,结束

public class StringDemo {
 
    public static void main(String[] args) {
        StringDemo stringDemo = new StringDemo();
        String str1 = "asdfghj";
        String str2 = stringDemo.reverse1(str1,2,5);
        System.out.println("反转后为:" + str2);
    }
 
    public String reverse1(String str, int start, int end) {
        if (str != null) {
            char[] charArray = str.toCharArray();
            for (int i = start, j = end; i < j; i++, j--) {
                char temp = charArray[i];
                charArray[i] = charArray[j];
                charArray[j] = temp;
            }
            return new String(charArray);
        }
        return null;
    }
}

运行结果:

反转后为:ashgfdj

方式二:使用String的拼接

将字符串分割为三部分:需反转字符串前,需反转字符串,需反转字符串之后,调用substring()方法截取字符串,循环倒序遍历需反转字符串部分,后拼接这三部分

    public static void main(String[] args) {
        StringDemo stringDemo = new StringDemo();
        String str1 = "asdfghj";
        String str2 = stringDemo.reverse1(str1,2,5);
        System.out.println("反转后为:" + str2);
    }
 
    public String reverse1(String str, int start, int end) {
        // 第一部分
        String newStr = str.substring(0, start);
        // 第二部分
        for (int i = end; i >= start; i--) {
            newStr += str.charAt(i);
        }
        // 第三部分
        newStr += str.substring(end + 1);
        return newStr;
    }

运行结果:

反转后为:ashgfdj

方式三:使用StringBuffer/StringBuilder替换String

相较于方式二的改进,用Stringbuilder中append()方法代替方式二中“+=”,效率更高

public class StringDemo {
 
    public static void main(String[] args) {
        StringDemo stringDemo = new StringDemo();
        String str1 = "asdfghj";
        String str2 = stringDemo.reverse1(str1,2,5);
        System.out.println("反转后为:" + str2);
    }
 
    public String reverse1(String str, int start, int end) {
        StringBuffer s = new StringBuffer(str.length());
        // 第一部分
        s.append(str.substring(0, start));
        // 第二部分
        for (int i = end; i >= start; i--) {
            s.append(str.charAt(i));
        }
        // 第三部分
        s.append(str.substring(end + 1));
        return s.toString();
    }
}

运行结果:

反转后为:ashgfdj

注:在方式三中,仅是字符串反转操作,不需要考虑线程安全问题,所以优先选择StringBuilder

附实战例子

对字符串中指定的部分进行旋转,如str="mmabcdfeffnn",指定abcdfeff部分进行旋转,则得到字符串str="mmffefdcbann"。

其实现的思路,我是这样的:将源字符串分为三部分,头,待旋转,尾,其中这三部分都需要进行采取截取的操作,而对于待旋转的部分,这里采用了一个技巧,那就是借用了StringBuffer(String string)作为中介,并调用其中的reverse()方法进行旋转。最后得到的三部分:头,已旋转,尾,进行连接concat(String string)操作即可。

代码如下:

/**
 * 字符串指定的部分进行反转
 * @author zhonglinsen
 * 2016-3-1 下午
 */
public class StringReverse {
    public static void main(String[] args) {
        String str="mmabcdefnn";
        int start=2;
        int end=7;
         
        System.out.println("原先字符串:          "+str);
        String strNew=strReverse(str, start, end);
        System.out.println("旋转了指定位置后的字符串: "+strNew);
    }
     
    public static String strReverse(String strArg,int start,int end){
         
        String strStart=strArg.substring(0,start);
         
        String strEnd=strArg.substring(end+1,strArg.length());
 
        String strSub=strArg.substring(start, end+1);
 
        StringBuffer sb=new StringBuffer(strSub);
        strSub=sb.reverse().toString();
         
        return strStart.concat(strSub).concat(strEnd);
    }
}

总结

到此这篇关于Java字符串中指定部分反转的文章就介绍到这了,更多相关Java字符串指定部分反转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • spring boot2结合mybatis增删改查的实现

    spring boot2结合mybatis增删改查的实现

    这篇文章主要给大家介绍了关于spring boot2结合mybatis增删改查的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring boot2具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • java实现水果超市管理系统

    java实现水果超市管理系统

    这篇文章主要为大家详细介绍了java实现水果超市管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 关于maven打包时的报错: Return code is: 501 , ReasonPhrase:HTTPS Required

    关于maven打包时的报错: Return code is: 501 , ReasonPhrase:HTTPS Requ

    这篇文章主要介绍了关于maven打包时的报错: Return code is: 501 , ReasonPhrase:HTTPS Required,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • intellij idea 启动tomcat 1099端口被占用的解决

    intellij idea 启动tomcat 1099端口被占用的解决

    这篇文章主要介绍了intellij idea 启动tomcat 1099端口被占用的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • jasypt SaltGenerator接口定义方法源码解读

    jasypt SaltGenerator接口定义方法源码解读

    这篇文章主要为大家介绍了jasypt SaltGenerator接口定义方法源码解读,,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Java中equals()方法实例详解

    Java中equals()方法实例详解

    equals方法是java.lang.Object类的方法,下面这篇文章主要给大家介绍了关于Java中equals()方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • java实现酷狗音乐临时缓存文件转换为MP3文件的方法

    java实现酷狗音乐临时缓存文件转换为MP3文件的方法

    这篇文章主要介绍了java实现酷狗音乐临时缓存文件转换为MP3文件的方法,涉及java针对文件操作的相关技巧,需要的朋友可以参考下
    2016-08-08
  • java类的加载过程以及类加载器的分析

    java类的加载过程以及类加载器的分析

    这篇文章给大家详细讲述了java类的加载过程以及类加载器的相关知识点内容,有需要的朋友可以学习下。
    2018-08-08
  • SpringBoot解决ajax跨域问题的方法

    SpringBoot解决ajax跨域问题的方法

    这篇文章主要为大家详细介绍了SpringBoot解决ajax跨域问题的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Jackson 反序列化时实现大小写不敏感设置

    Jackson 反序列化时实现大小写不敏感设置

    这篇文章主要介绍了Jackson 反序列化时实现大小写不敏感设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论