javaee论坛

普通会员

225648

帖子

345

回复

359

积分

楼主
发表于 2019-11-07 13:17:02 | 查看: 375 | 回复: 0

目录1方式一:将字符串转化为char[]2方式二:使用String拼接的方式3方式三:使用StringBuilder/StringBuffer

给定一个字符串,将字符串中指定部分进行反转。例如:将“helloabcdworld”反转为“hellodcbaworld”

不管在学习还是工作中,都会遇到操作字符串的问题,官方API里面给出了它的很多方法,只要对这些方法熟练于心,就很容易实现操作字符串。关于字符串的常用方法在此不详细介绍,参考官方文档,在以后的博客中我也会总结Java中String、StringBuilder、StringBuffer的常用方法。

这篇博客提供了三种方式实现字符串的反转操作

1方式一:将字符串转化为char[]publicclassStringReverse{publicstaticvoidmain(String[]args){Stringstr="helloabcdworld";//反转字符串开始位置的下标intstart=5;//反转字符串结束位置的下标intend=8;System.out.println("原先的字符串:"+str);StringstrNew=strReverse(str,start,end);System.out.println("指定部分进行反转后的字符串:"+strNew);}/****@paramstr原先的字符串*@paramstart反转字符串开始位置的下标*@paramend反转字符串结束位置的下标*@return返回反转后的字符串*/privatestaticStringstrReverse(Stringstr,intstart,intend){if(str!=null){//将此字符串转换为新的字符数组char[]charArray=str.toCharArray();//利用循环的方式交换位置for(inti=start,j=end;i<j;i++,j--){chartemp=charArray[i];charArray[i]=charArray[j];charArray[j]=temp;}//将字符数组转换为字符串Strings=String.valueOf(charArray);//Strings=newString(charArray)returns;}returnnull;}}

代码执行结果:

原先的字符串:helloabcdworld指定部分进行反转后的字符串:hellodcbaworld2方式二:使用String拼接的方式publicclassStringReverse1{publicstaticvoidmain(String[]args){Stringstr="helloabcdworld";//开始位置的下标intstart=5;//结束位置的下标intend=8;System.out.println("原先的字符串:"+str);StringstrNew=strReverse(str,start,end);System.out.println("指定部分进行反转后的字符串:"+strNew);}/****@paramstr原先的字符串*@paramstart反转字符串开始位置的下标*@paramend反转字符串结束位置的下标*@return返回反转后的字符串*/privatestaticStringstrReverse(Stringstr,intstart,intend){//把字符串从头到要反转的位置的字符串截取出来//在此测试代码中,需要反转abcd.start=5,因此截取的是helloStringstrNew=str.substring(0,start);//利用循环的方式从end位置开始遍历取值,追加到截取的子串后面for(inti=end;i>=start;i--){//charAt()获取指定位置的值strNew+=str.charAt(i);}//substring()截取子串,追加到strNew后面strNew+=str.substring(end+1);returnstrNew;}}

在此不再展示测试结果,结果和第一种方式一样。

3方式三:使用StringBuilder/StringBufferpublicclassStringReverse2{publicstaticvoidmain(String[]args){Stringstr="helloabcdworld";//开始位置的下标intstart=5;//结束位置的下标intend=8;System.out.println("原先的字符串:"+str);StringstrNew=strReverse(str,start,end);System.out.println("指定部分进行反转后的字符串:"+strNew);}/****@paramstr原先的字符串*@paramstart反转字符串开始位置的下标*@paramend反转字符串结束位置的下标*@return返回反转后的字符串*/privatestaticStringstrReverse(Stringstr,intstart,intend){//构造一个容量为str.length的字符串构建器StringBuilderstringBuilder=newStringBuilder(str.length());//添加[0,start)的字符串stringBuilder.append(str.substring(0,start));//利用循环的方式从end位置开始遍历取值,追加到stringBuilder后面for(inti=end;i>=start;i--){stringBuilder.append(str.charAt(i));}//substring()截取子串,并追加到stringBuilder后面Stringsubstring=str.substring(end+1);stringBuilder.append(substring);//toString()返回表示此顺序中的数据的字符串returnstringBuilder.toString();}}

在此不再展示测试结果,结果和第一种方式一样。

在反转操作中,由于不需要考虑多线程安全的问题,优先采用StringBuilder,StringBuilder和StringBuffer.都是可变的字符序列,但是StringBuilder的效率高。

上一篇经典算法(2)一文搞懂二分法查找(循环和递归两种方式)下一篇经典算法(4)一文搞懂什么是快速排序


您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017