《Java必刷的典型题》:将字符串指定的字符进行反转,例:“abcdef”将“bcde”进行反转得“aedcbf”。

发布时间: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);
         
    }
}

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号