(59)字符串练习

一、模拟trim方法去除两端的空格(—bh—)

public static void SimulateTrim() {
        /*
         * 需求:将字符串两端的空格去掉(这个两端不仅0,尾)
         * 思路:1前面有个指针start,逐一向后判断,直到非空
         *       2后面有个指针end,逐一向前判断,直到非空
         *       3.start以及之前和end以及之后都是判断过的,所以start<end
         *        有start==end原因是:"-----a",判断到a时,start==end,但是仍要判断
         *       
         */
        //String s="---abc----";
        //String s="----";
        //String s="----a";
        String s="a----";
          int start=0;
          int end=s.length()-1;
          Object String ;
        while(start<=end&s.charAt(start)=='-')/*注意不会出现下标越界情况,因为有end控制着呢,当start==end,若不为空,则这个字符串就一个字符;
                                                 *若为空,则start=end+1;while 判断失败,while(end)不执行*/
                  start++;



          while(start<=end&s.charAt(end)=='-') {
                 end--;
          }

         if(start>end) //若为空,则start先执行,等于end;end后执行,end-1,所以start>end为空串
             sop("这是个只含空格的字符串");
         else
             sop("哈哈"+s.substring(start, end+1)+"哈哈");

    }

二、去除字符串两端(0、末尾)的空格

public static void SimulateTrim() {
        /*
         * 思路:1获得0,s.length-1位置上的字符,
         *        若0号,最后都不为空,则直接输出该字符串即可
         *        若0号位不空,最后空,则获取子串,substring(0,leng-1)
         *        若0号位空,最后不空,则获取substring(1,leng-1)
         *        若0、最后均空,则获取substring(1,leng-2)
         */
        //String s=" abcdef ";
        //String s=" abcdef";
        //String s="abcd ";
        //String s=" abcd";
        String s=" abcd ";
        String s1=null;
        if(s.charAt(0)!=' '&(s.charAt(s.length()-1)!=' ')) {
              s1=s.substring(0, s.length());
              System.out.println("0号、最后都不为空");
        }
        else if(s.charAt(0)!=' '&(s.charAt(s.length()-1)==' ')) {
          s1=s.substring(0, s.length()-1);
          System.out.println("0号不为空、最后为空");
        }
        else if(s.charAt(0)==' '&(s.charAt(s.length()-1)!=' ')) {
            s1=s.substring(1, s.length());
              System.out.println("0号空、最后不空");
        }
        else {
            s1=s.substring(1, s.length()-1);
              System.out.println("0号、最后都为空");
        }
        sop(s1+"哈哈哈");


    }

三、删除字符串中的所有空格

public static void SimulateTrim_1() {

        /*
         *       思路:1先将字符串转换为字符数组ch1,新建一个与字符串相同长度的字符数组ch2(非空字符最多为原字符串长度)
         *       2将ch1的每一个元素都和空比较,当不空时,将此字符放入ch2,并且有个计数器
         *       3将ch2转换字符串
         *       4截取非空的子字符串部分
         */
        String s="acb de v ";
        char [] ch1=s.toCharArray();
        char [] ch2=new char[s.length()];
        int count=0;
        for(int i=0;i<ch1.length;i++) {
            if(ch1[i]!=' ')
            {
                ch2[count]=ch1[i];
                count=count+1;
            }
        }
        String s1=new String(ch2);
        String s2=s1.substring(0, count);
        sop(s2+"s2的长度为:"+s2.length());  
    }

四、将一个字符串进行部分反转“abcdefg” “abfedcg”

public static void methodReverse() {
        /*
         * 需求:将字符串中指定部分进行反转  "abcdefg"  "abfedcg"
         * 思路:1获取子串,将子字符串转换为字符数组 ch [toCharArray()],还需个数组,接收反转的数据
         *       2将字符数组上的元素反转for实现
         *       3将字符数组ch转换为字符串
         *       4字符串连接
         */
        String s="abcdefg";//将下标2-5转换
        String s1=s.substring(2, 6);
        char[] ch=s1.toCharArray();
        char[] ch1=new char[ch.length];
        for(int x=0;x<ch.length;x++) {
            ch1[(ch.length-1)-x]=ch[x];
        }
        String s3=new String(ch1);
        sop(s.substring(0, 2)+s3+s.substring(6));

    }

五、获取特定字符个数

public static void methodGet() {
        /*
         *       思路:1将字符串转换为字符数组
         *      2判断字符数组中每个元素是否和特定元素相同,for,需要计数器
         */
        String s="abkkcdkkefkkskk";
        char [] ch=s.toCharArray();
        int count=0;
        for(int x=0;x<ch.length;x++) {
            if(ch[x]=='k') {
                count++;
            }
        }
        sop("k的个数为:"+count);

    }

六、获取两个字符串中最大相同子串(s1.ength()>s2.length())

public static String methodTrim3(String s1,String s2) {
        /*
         * 需求:给两个串,s1,s2,寻找s1在s2的最大子串(在此方法中s1>s2长度)
         *       思路:通过不断缩小字符串长度,来寻找s1中是否有该子串(contains方法,返回布尔值)
         *       外层控制每次s2子串的长度,但是间接控制
         *       因为长度相同的子串可能有多个,通过a,z同时后移,来控制子串的长度不变,直到z到length+1(因为要先获得子串sbuString(int start,int end)
         *       z=s2.length()-x:控制子串的长度,第一次(相对外层):length-0,第二次:length-1.....
         */
        for(int x=0;x<s2.length();x++) {
            for(int a=0,z=s2.length()-x;z!=s2.length()+1;a++,z++) {
                String temp=s2.substring(a, z);
                if(s1.contains(temp)) {
                    return temp;
                }
            }
        }
        return "";
    }

七、获取两个字符串中最大相同子串(需要判断哪个两个字符串的长短)

public static String getMax_1(String s1,String s2) {
        /*
         * 需求:寻找最大子串
         *       在getMax方法中已经实现了,但是有个小问题,因为用户输入,s1,s2长度并不是确定的,
         *       但是呢,都应该是在小串中寻找是否大串包含小串的子串。
         *       所以,先判断传进来字符串的长度(就是判断谁当大串,谁当小串),在for中用那个小串即可
         */
        String max=((s1.length()>s2.length())?s1:s2);
        String min=(s1==max)?s2:s1;
        sop("max="+max+"-----"+"min"+min);
        for(int x=0;x<min.length();x++) {
            for(int a=0,z=min.length()-x;z!=min.length()+1;a++,z++) {
                String temp=min.substring(a, z);
                if(max.contains(temp)) {
                    return temp;
                }
            }
        }

        return "";

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值