在一个字符串里面统计给定字符串的个数

在一个字符串里面统计给定字符串的个数

1.拆分法

1.1 思路分析

例如字符串为"1java2java3e"以java为拆分字符串的话

得到的字符串数组 String[] strs={“1”,“2”,“3e”},其长度为3

而满足条件的字符串个数=2=字符串数组长度-1,因而就有如下结论:

拆分得到的字符串长度-1=给定字符的个数

1.2 示例源码

package Work;
public class Test05 {
    public static void main(String[] args) {
        System.out.println(countString("1java23javajav", "java"));
        System.out.println(countString("zdhwefyg", "java"));
    }
    public static int countString(String str,String regex){
        //str为原字符串,regex为给定字符串
        return str.split(regex).length-1;
    }

}

1.3 示例源码运行截图

在这里插入图片描述

2.替换统计法

2.1 思路分析

设原字符串为str1

将原字符串中存在的给定字符串替换成""(空串),得到一个新字符串str2;

给定字符串的数量=(str1-str2)/给定字符串的长度

2.2 示例源码

package Work;
public class Test05 {
    public static void main(String[] args) {
        System.out.println(countString("java1java23javajav", "java"));
        System.out.println(countString("zdhwefyg", "java"));
    }
    public static int countString(String str,String regex){
        //str为原字符串,regex为给定字符串
        return (str.length()-str.replace(regex,"").length())/regex.length();
    }

}

2.3 示例源码运行截图

在这里插入图片描述

3.下标法

3.1 思路分析

通过indexOf找到出现给定字符串的第一次出现位置的下标index,

若为-1,统计结果为0

若不为-1,就进入循环(循环终止条件为indexOf得到的结果为-1).此时count数量需要加1

再从找到的字符串中最后一个字符的后一位(index+regex.length)开始寻找是否有给定的字符串,若有,则不退出循环,count继续加1,然后继续往后找(找的位置依然和前面是同一个规律),直到后面没有给定字符串了,那么就结束循环,最终返回的就是count的数量

3.2 示例源码

package Work;
public class Test05 {
    public static void main(String[] args) {
        System.out.println(countString("java1java23javajav", "java"));
        System.out.println(countString("zdhwefyg", "java"));
    }
    public static int countString(String str,String regex){
        //str为原字符串,regex为给定字符串
        int index=str.indexOf(regex);
        //第一次找原来字符串有没有给定字符串,如果为-1(代表没有),那就没有必要往后去找了,如果有就进入循环去找
        int count=0;
        while (index!=-1){
            //进入循环就count+1
            count++;
            //然后每次都需要更新index的值,因为要从找到字符串的最后一个位置的后一位开始找
            //没有必要再去从前往后找了
            index=str.indexOf(regex,index+regex.length());
        }
        return  count;
    }

}

3.3 示例源码运行截图

在这里插入图片描述

4.下标+截取子串法

4.1 分析

通过indexOf找到出现给定字符串的第一次出现位置的下标index,

如果为-1,统计结果就为0,没有必要再去往后截取了

如果不为-1,就进入循环里面去找(循环成立的条件就是不为-1),

循环每成立一次count+1,然后成立后你需要从找到的给定字符串的最后一位字符的后一位开始往后截取(因为前面已经比较完了,没有截取的必要了)

截取完后需要获取截取后的子串中的给定字符串的下标,若不为-1就继续循环,否则

退出循环,然后一直这样截取然后加上获得下标下去,直到得到的下标为-1,就退出循环

4.2 示例源码

package Work;
public class Test05 {
    public static void main(String[] args) {
        System.out.println(countString("j2ava1java23javajav", "java"));
        System.out.println(countString("zdhwefyg", "java"));
    }
    public static int countString(String str,String regex){
        //str为原字符串,regex为给定字符串
        int index=str.indexOf(regex);
        //第一次找原来字符串有没有给定字符串,如果为-1(代表没有),那就没有必要往后去找了,如果有就进入循环去找
        int count=0;
        while (index!=-1){
            //进入循环就count+1
            count++;
           //每弄一次都需要截取+获取截取后子串中给定字符串的位置
            str=str.substring(index+regex.length());
            //indexOf默认还是从0开始,只不过是从字符串的第一位开始而已
            index=str.indexOf(regex);
        }
        return  count;
    }

}

4.3 示例源码运行截图

在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值