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


      有一道很经典的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);
        }
    }

     

  • 相关阅读:
    最大回文子串
    找出不含重复字符的最长子串的长度
    链表表示的2个数相加
    如何胜任一个小型公司的技术总监?我的感想
    React 的坑
    MobX 学习
    摘要
    AI 帮助涂鸦
    计算机的前世今生
    常用编辑器实用技巧(pycharm、sublimeText、vim、vscode、Jupyter)
  • 原文地址:https://www.cnblogs.com/hlhdidi/p/5611926.html
Copyright © 2020-2023  润新知