Java字符串中指定部分反转的三种方式
作者:我不是伟人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字符串指定部分反转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!