发布时间:2024-09-22 17:01
[♡作者主页♡] :小黎的培培笔录
[♡作者介绍♡] :大一小白,专注于Java领域的创作,认证:华为云-云享专家、阿里云-云享专家、阿里云星级博主。
[♡邀请♡] :有志同道合的朋友可以加个QQ:2776680982,一起讨论、学习、进步、加油。
目录
一、第一种方法
1、分析
2、代码解析
3、完整代码
4、代码优化
二、第二种方法
1、分析
2、代码解释
3、完整代码
4、代码优化
1、分析
▷ 第一步:要将字符串中的“bcde”进行反转,首先要确定位置,我们可以使用一个方法,传入初位置start 和 末位置end,然后在初位置和末位置之间的字符就是要反转的。
▷ 第二步:因为我们输入的字符串,而我们进行反转时需要遍历,所以需要将字符串转换成字符数组,要用到 toCharArray() 方法。
▷ 第三步:转换成数组后需要进行遍历,而遍历的初始位置定为start 和末位置定为end,也就是说:我们只需要遍历要反转的字符串,其他的字符不动即可。
▷ 第四步:循环遍历时我们需要交换字符,所以要创建一个中间变量 char temp = \' \';
,然后进行两个字符的相互交换。
2、代码解析
1、创建方法:
public static String reverse(String str,int start,int end){ //返回值是交换后的字符串,是String 类 //需要传入原字符串str //然后传入开始位置str 和末尾位置end }
2、字符串转换成字符数组:
//将字符串转换成字符数组 char[] arr = str.toCharArray(); //交换时需要的中间变量 char temp = \' \';
3、循环遍历:
for(int i = start,j = end; i < j;i++ ,j--){ //一个for循环 ,两个参数 //判断条件i 必须小于 j ,否则字符又会再反转回来 //开始位置和结尾位置向中间靠拢,所以i++,j-- }
4、交换字符:
//进行交换 temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;
5、最后返回字符串:
//创建一个新的字符串对象 return new String(arr);
3、完整代码
public class Job02{ public static void main(String[] args) { //将字符串中指定的部分反转,比如将“abcdef” 反转为 “aedcbf” //编写方法public static String reverse(String str,int start,int end)搞定 String str = \"abcdef\"; System.out.println(\"==转换前===\"); System.out.println(str); System.out.println(\"==转换后==\"); str = Job02.reverse(str,1,5); System.out.println(str); } public static String reverse(String str,int start,int end){ char[] arr = str.toCharArray(); char temp = \' \'; for(int i = start,j = end; i < j;i++ ,j--){ temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } return new String(arr); } }
4、代码优化
public class Job02{ public static void main(String[] args) { //将字符串中指定的部分反转,比如将“abcdef” 反转为 “aedcbf” //编写方法public static String reverse(String str,int start,int end)搞定 String str = \"abcdef\"; System.out.println(\"==转换前===\"); System.out.println(str); System.out.println(\"==转换后==\"); //使用异常进行优化 try{ str = Job02.reverse(str,1,5); }catch(Exception e){ System.out.println(e.getMessage()); return; } System.out.println(str); } public static String reverse(String str,int start,int end){ //代码优化,进行检验 //先找正确的情况,然后取反 if(!(str != null && start >= 0 && start < end && end < str.length())){ //抛出异常 throw new RuntimeException(\"参数不正确!\"); } char[] arr = str.toCharArray(); char temp = \' \'; for(int i = start,j = end; i < j;i++ ,j--){ temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } return new String(arr); } }
1、分析
▷ 第一步:将要反转的字符提取出来,让它进行单独的反转。
▷ 第二步:利用for循环进行反转,需要一个新的数组来接收。
▷ 第三步:再将反转后的字符串复制回原先的字符串中。
▷ 注意:此方法分析简单,但实践起来略复杂。
2、代码解释
1、提取字符,需要arraycopy方法:
//需要反转的字符长度大小的数组 char[] arr = new char[end - start]; //原字符串转成字符数组 char[] strs = str.toCharArray(); //读取需要反转的字符,不懂请查阅arraycopy方法的用法 System.arraycopy(strs, start, arr, 0, end - start);
2、进行反转:
//一个新的数组进行接收 char[] temp = new char[end - start]; //进行反转 for (int i = 0; i < temp.length; i++) { //将原数组的末尾字符给新数组的第一个,依次类推 temp[i] = arr[end - start -i - 1]; }
3、重新拷贝回去:
//将反转过后的字符拷贝回去,再次使用arraycopy方法 System.arraycopy(temp,0,strs,start,end - start);
3、完整代码
public class Job02{ public static void main(String[] args) { //将字符串中指定的部分反转,比如将“abcdef” 反转为 “aedcbf” //编写方法public static String reverse(String str,int start,int end)搞定 String str = \"abcdef\"; System.out.println(\"==转换前===\"); System.out.println(str); System.out.println(\"==转换后==\"); str = Job02.reverse(str,1,5); System.out.println(str); } public static String reverse(String str,int start,int end){ char[] arr = new char[end - start]; char[] strs = str.toCharArray(); //读取需要反转的字符 System.arraycopy(strs,start,arr,0,end - start); //进行反转 char[] temp = new char[end - start]; for (int i = 0; i < temp.length; i++) { temp[i] = arr[end - start -i - 1]; } //将反转过后的字符拷贝回去 System.arraycopy(temp,0,strs,start,end - start); return new String(strs); } }
4、代码优化
public class Job02{ public static void main(String[] args) { //将字符串中指定的部分反转,比如将“abcdef” 反转为 “aedcbf” //编写方法public static String reverse(String str,int start,int end)搞定 String str = \"abcdef\"; System.out.println(\"==转换前===\"); System.out.println(str); System.out.println(\"==转换后==\"); try{ str = Job02.reverse(str,1,5); }catch(Exception e){ System.out.println(e.getMessage()); return; } System.out.println(str); } public static String reverse(String str,int start,int end){ //代码优化,进行检验 //先找正确的情况,然后取反 if(!(str != null && start >= 0 && start < end && end < str.length())){ //抛出异常 throw new RuntimeException(\"参数不正确!\"); } char[] arr = new char[end - start]; char[] strs = str.toCharArray(); //读取需要反转的字符 System.arraycopy(strs,start,arr,0,end - start); //进行反转 char[] temp = new char[end - start]; for (int i = 0; i < temp.length; i++) { temp[i] = arr[end - start -i - 1]; } //将反转过后的字符拷贝回去 System.arraycopy(temp,0,strs,start,end - start); return new String(strs); } }