• 一个小题目的三种不同的解法


      有一道很经典的Java题目,虽然很简单,但是可以开发出很多种不同的解法,这是我在今天重新复习了正则的时候,忽然回想起来的.题目的名字是:"查找一个小串在大串中出现的次数."有三种思路,第一种,利用substring,通过寻找小串出现的位置,改变大串从小串出现的位置处重新寻找小串的位置,以此类推.第二种解法,直接用小串分割大串,分割出的字符串数组长度-1即是小串出现的次数,但是这时要考虑一种特殊情况,即小串出现在末尾处.这时候字符串数组的长度就是小串出现的次数.第三种利用正则表达式中Pattern和Matcher类,进行对于小串的匹配,每匹配一次,将计数器的数值加1.下面是这三种方法的代码:

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    //在大串中寻找小串出现的次数..
    public class Demo2 {
        public static void main(String[] args) {
            String str="abc123abc123abadasdabc";
            String st="abc";
            getCount(str,st);
        }
        /*通过split函数.*/
        /*
        private static void getCount(String str, String st) {
            int count=0;
            if(!str.contains(str)) {
                System.out.println(str+" 不包含 "+st);
                return;
            }
            if(str.equals(st)) {
                System.out.println("个数为:"+1);
                return;
            }
            String [] sts=str.split(st);
            count=sts.length;
            if(str.endsWith(st)) {
                count++;
            }
            System.out.println("个数为:"+(count-1));
        }
        */
        /*通过substring*/
        /*private static void getCount(String str, String st) {
            int count=0;
            int pos=0;
            if(!str.contains(st)) {
                System.out.println(str+" 不包含 "+st);
                return;
            }
            while(str.contains(st)) {
                count++;
                pos=str.indexOf(st);
                str=str.substring(pos+st.length(), str.length());
            }
            System.out.println(count);
        }*/
    /*
     *     通过正则表达式的匹配功能
     * */
        private static void getCount(String str, String st) {
            int count=0;
            String regex=st;
            Pattern p=Pattern.compile(regex);
            Matcher m=p.matcher(str);
            while(m.find()) /*find将从str开头开始寻找与regex匹配的字串,利用循环,不断寻找,直到找不到为止*/{
                count++;
            }
            System.out.println(count);
        }
    }

     

  • 相关阅读:
    【雕爷学编程】Arduino动手做(102)TM1638按键数码管
    【雕爷学编程】Arduino动手做(103)四路无线遥控套件
    【昊泽爷爷】六一儿童节的礼物——学做简单机器人的工作台
    使用sourcegraph实现高效全局代码仓库搜索
    小程序模糊效果,兼容安卓,iOS
    软件测试阶段划分,各阶段测试的对象
    js执行机制
    【vue3】初探一
    linux设置默认PHP版本
    python下载大文件列表,断点续传,跳过已下载,显示下载进度
  • 原文地址:https://www.cnblogs.com/hlhdidi/p/5611926.html
Copyright © 2020-2023  润新知