JAVA String类学习课后练习

1.将字符串中指定部分进行反转,例如将“abcefg”反转为“abfedcg”。

class StringDemoTest{
    public static void main(String[] args) {
        StringDemo stringDemo=new StringDemo();
        String str="abcdefg";
        str=stringDemo.reverse2(str,2,5);
        System.out.println(str);
    }
}
class StringDemo{
    public String reverse(String str,int startindex,int endindex){
        if(str!=null&&str.length()!=0){
         char arr[]=str.toCharArray();
         for(int i=startindex,j=endindex;i<j;i++,j--){
             char temp=arr[i];
             arr[i]=arr[j];
             arr[j]=temp;
         }
         return new String(arr);
        }
        return null;
    }
    public String reverse2(String str,int startindex,int endindex){
        if(str!=null){
            StringBuilder stringBuilder=new StringBuilder(str.length());
            //将str的长度传给StringBuilder的构造器,创建一个长度相同的StringBuilder的对象
            stringBuilder.append(str.substring(0,startindex));
            //分别调用String、StringBuilder类中拼接字符串的方法:substring、append
            for(int i=endindex;i>=startindex;i--){
                stringBuilder.append(str.charAt(i));
                //调用String类中引用某一索引值处元素的方法:charAt()
            }
            stringBuilder.append(str.substring(endindex+1));
            return stringBuilder.toString();
        }
        return null;
    }
    /*
    reverse2相比于reverse效率更高,且所占用空间更少,因为StringBuilder是可变的,每次改变
    只用在原基础上修改,而String是不可变的,即每一次修改都需要重新创建,要占用更多内存
     */
}

2.获取一个字符串在另一个字符串中出现的次数

class GetcountTest{
    public static void main(String[] args) {
        String mainstr="ablkjabfabbaasdab";//主字符串
        String substr="ab";//待查找字符串
        Getcount getcount=new Getcount();
        int count=getcount.getcount(mainstr,substr);
        System.out.println(count);
    }
}
class Getcount{
    public int getcount(String mainstr,String substr){
        int mainlength=mainstr.length();
        int sublength=substr.length();
        if(mainlength>=sublength){//不符合此条件,直接返回0
            int count=0,index=0;
            while((index=mainstr.indexOf(substr,index))!=-1){
                /*此处调用了String类中的indexOf方法,该方法可以返回
                从索引index开始查找substr在mainstr中首次出现的索引值
                若返回值为-1,则表示未找到
                */
                count++;
                index+=sublength;//此处表示从下一次可能开始的位置查找
            }
            return count;
        }
        return 0;
    }
}

3.获取两个字符串中最大相同子串(本题方法只满足只有一个最大相同字串)

class GetmaxstringTest{
    public static void main(String[] args) {
        String str1="safkjhellodkaf";
        String str2="s35hellod";
        Getmaxstring get=new Getmaxstring();
        String str= get.getmaxstring(str1,str2);
        System.out.println(str);
    }
}
class Getmaxstring{
    public String getmaxstring(String str1,String str2){
        String maxstr=(str1.length()>str2.length())?str1:str2;
        String minstr=(str1.length()<str2.length())?str1:str2;
        int length=minstr.length();
        for(int i=0;i<length;i++){//查找的轮数最大就是较短字符串的长度
            for(int x=0,y=length-i;y<=length;x++,y++){//x,y分别是开始和结束查找的位置
                String substr=minstr.substring(x,y);
                if(maxstr.contains(substr)){
                    //此处调用String类函数contains:判断maxstr字符串是否包含substr字符串
                    return substr;
                }//若没找到,则查找位置整体向后挪一位
            }
        }
        return null;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值