算法(3)Java实现将字符串中指定部分进行反转

mac2024-07-20  60

写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。

相关文章

点此查看 【算法系列】 博客文章


目录

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

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

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

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

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

public class StringReverse { public static void main(String[] args) { String str = "helloabcdworld"; // 反转字符串开始位置的下标 int start = 5; // 反转字符串结束位置的下标 int end = 8; System.out.println("原先的字符串: "+str); String strNew=strReverse(str, start, end); System.out.println("指定部分进行反转后的字符串: "+strNew); } /** * * @param str 原先的字符串 * @param start 反转字符串开始位置的下标 * @param end 反转字符串结束位置的下标 * @return 返回反转后的字符串 */ private static String strReverse(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; } // 将字符数组转换为字符串 String s = String.valueOf(charArray); // String s = new String(charArray) return s; } return null; } }

代码执行结果:

原先的字符串: helloabcdworld 指定部分进行反转后的字符串: hellodcbaworld

2 方式二: 使用String拼接的方式

public class StringReverse1 { public static void main(String[] args) { String str = "helloabcdworld"; // 开始位置的下标 int start = 5; // 结束位置的下标 int end = 8; System.out.println("原先的字符串: "+str); String strNew=strReverse(str, start, end); System.out.println("指定部分进行反转后的字符串: "+strNew); } /** * * @param str 原先的字符串 * @param start 反转字符串开始位置的下标 * @param end 反转字符串结束位置的下标 * @return 返回反转后的字符串 */ private static String strReverse(String str, int start, int end) { // 把字符串从头到要反转的位置的字符串截取出来 // 在此测试代码中,需要反转abcd. start=5,因此截取的是hello String strNew = str.substring(0, start); // 利用循环的方式从end位置开始遍历取值,追加到截取的子串后面 for (int i = end; i >= start; i--) { // charAt() 获取指定位置的值 strNew += str.charAt(i); } // substring() 截取子串,追加到strNew后面 strNew += str.substring(end + 1); return strNew; } }

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

3 方式三: 使用StringBuilder/StringBuffer

public class StringReverse2 { public static void main(String[] args) { String str = "helloabcdworld"; // 开始位置的下标 int start = 5; // 结束位置的下标 int end = 8; System.out.println("原先的字符串: "+str); String strNew=strReverse(str, start, end); System.out.println("指定部分进行反转后的字符串: "+strNew); } /** * * @param str 原先的字符串 * @param start 反转字符串开始位置的下标 * @param end 反转字符串结束位置的下标 * @return 返回反转后的字符串 */ private static String strReverse(String str, int start, int end) { // 构造一个容量为str.length的字符串构建器 StringBuilder stringBuilder = new StringBuilder(str.length()); // 添加[0,start) 的字符串 stringBuilder.append(str.substring(0, start)); // 利用循环的方式从end位置开始遍历取值,追加到stringBuilder后面 for (int i = end; i >= start; i--) { stringBuilder.append(str.charAt(i)); } // substring() 截取子串,并追加到stringBuilder后面 String substring = str.substring(end + 1); stringBuilder.append(substring); // toString() 返回表示此顺序中的数据的字符串 return stringBuilder.toString(); } }

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

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

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

最新回复(0)