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

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

 

时间: 2024-08-08 22:09:35

一个小题目的三种不同的解法的相关文章

Shell 脚本中调用另一个 Shell 脚本的三种方式

主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 Shell. exec 在同一个 Shell 内执行,但是父脚本中 exec 行之后的内容就不会再执行了 source 在同一个 Shell 中执行,在被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用,相当于合并两个脚本在执行.   第一种:fork 特点:会生成子PID而且可重

三分钟创建一个小程序-每天三分钟玩转小程序 1

点击上方"编程三分钟",马上关注,每周1.3.5定时更新. 好险,还有几分钟,差点没有赶上周五的尾巴.这次带来的是1. 小程序开发前的准备,非常的简单,让我们花三分钟创建一个小程序! 1. 注册账号 访问微信公众平台网站:https://mp.weixin.qq.com 鼠标放到小程序上 发现图案变成了,下面这样,点击[查看详情],进入小程序注册页面. 拉到最下面,出现前往注册 填写一个没有注册过公众号,也没有注册过小程序的邮箱,来注册. . 2. 激活邮箱 这个时候你会收到一封邮件(

数学奥林匹克问题解答:一道不等式题目的三种解法

设 $a_1, a_2, \cdots, a_n\in\mathbf{N^*}$, 且各不相同. 求证: $${a_1\over1^2} + {a_2\over2^2} + \cdot + {a_n\over n^2} \ge {1\over1} + {1\over2} + \cdots + {1\over n}.$$ 解法一: 考虑使用基本不等式 $a + b\ge 2\sqrt{ab}$ 消去左边各项之分子. $$\because {a_k\over 1^2} + {1\over a_k}

Shell中调用、引用、包含另一个脚本文件的三种方法

脚本 first (测试示例1) first#!/bin/bashecho 'your are in first file' 方法一:使用source #!/bin/bashecho 'your are in second file'source first 方法二:使用. #!/bin/bashecho 'your are in second file'. first 方法三:使用sh#!/bin/bashecho 'your are in second file'sh  first

一个Java应用,三种字体风格(Java, Windows, Mac),真是蛋疼

大家看看下面这张图,红色圈起来的是Java难看至极的字体渲染,黄色圈起来的是正常的Windows渲染,绿色是Mac风格的渲染. 其实我感觉正常风格就挺好的,就是看那个Java的Swing菜单,非常不顺眼. 这种Java的桌面程序,字体的风格都统一不了.其实我也想知道这是怎么做到的? 常年使用Eclipse.安装过一次Netbeans,也遇到这种难看的Java字体,实在是无法忍受.

一个类中的三种方法 1全局方法 2成员方法 3构造方法(转)

public class Test{ private int age; //这是成员变量 public Test(int age){ //这是构造方法 this.age = age; } public void setAge(int age){ //这是成员方法 this.age = age; } public static int getAge(){ //这是全局方法,加了static ,成员方法就会变成全局方法 return this.age; } } 成员方法和构造方法没啥关系,区别在于成

链表中插入一个节点的三种情况

在链表中插入一个元素可以分为三种情况: 1.在节点的时候 2.在链表中间的任意位置 3.在链表的最后位置,也可以认为这种情况为追加(这个就留到追加的时候来实现) 下面是代码的实现 SN *Insert_S_Node( SN *head ) /* 传入的参数是被插入链表中的头指针 */ { SN *Insert_Node=NULL, *Dest_Node = NULL; /* Insert_Node是将要做成的新链表中的节点 Dest_Node是要插入的节点*/ INT32 OSM = 1, i3

K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means)介绍与对比

  一.概述 在本篇文章中将对四种聚类算法(K-means,K-means++,ISODATA和Kernel K-means)进行详细介绍,并利用数据集来真实地反映这四种算法之间的区别. 首先需要明确的是上述四种算法都属于"硬聚类"算法,即数据集中每一个样本都是被100%确定得分到某一个类别中.与之相对的"软聚类"可以理解为每个样本是以一定的概率被分到某一个类别中. 先简要阐述下上述四种算法之间的关系,已经了解过经典K-means算法的读者应该会有所体会.没有了解过

Android笔记2——开发前奏2工程目录介绍和一个小应用

转载请注明http://www.cnblogs.com/devtrees/p/4405519.html 一.创建第一个应用HelloWorld (一)创建步骤: 1.New出一个Android Application Project 三种方式 1): 2): 3): 2.会出现下图的窗口: 分别是:应用名:给用户看的 工程名:开发工具中显示的项目名 包名: 客户端中设置->应用->应用列表中显示的名字 兼容的最低版本: 兼容的最高版本: 开发基于的版本:(一般将兼容的最高版本和开发所基于的版本