Java练习题之 求字符串str中,s出现的次数

练习题:

String str = "我是中国人, 中国的首都是北京,中国有长江黄河,中国最高的山峰是珠穆朗玛峰,拉萨是中国最高的城市。";

String s = "中国";

求str中s出现的次数


解题思路:

思路一:第一次查找s下标位置后,下次循环从当前下标开始向后查询,反复相加直到查询没有s结束循环。

思路二:每次查询到s后截取str并保存到一个新的str1字符串中,反复查询并截取直到str1中没有s结束循环,统计次数。(这种因为每次都要创建一个新的str1,需要占用内存空间降低性能,虽然也可以最终求得结果,但是个人觉得性价比不高。)


代码:

写法一:

public static void main(String[] args) {
    String str = "我是中国人, 中国的首都是北京,中国有长江黄河,中国最高的山峰是珠穆朗玛峰,拉萨是中国最高的城市。";
    String s = "中国";

    int index = str.indexOf(s);//索引值,从0开始
    int count = 0;//统计目标字符串的个数,累计相加
    while (index != -1){//0不等于-1,开始执行
        count++; //统计次数+1
        index += s.length();//查找到后加上s的长度,用于 计算新的查找起始位置
        index = str.indexOf(s, index);//查找下一个目标字符串的位置
    }

    System.out.println("count = " + count);//5
}

简化后:

public static void main(String[] args) {
    String str = "我是中国人, 中国的首都是北京,中国有长江黄河,中国最高的山峰是珠穆朗玛峰,拉萨是中国最高的城市。";
    String s = "中国";
    int index = -1;
    int count = 0;//统计目标字符串的个数

    while ((index = str.indexOf(s, index)) != -1) {
        count++; //统计次数+1
        index += s.length();//查找到后加上s的长度,用于 计算新的查找起始位置
    }
    System.out.println("count = " + count);
}

键盘输入:

import java.util.Scanner;

public class Test01 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一句话:");
        String string = input.next();
        System.out.println("请输入想要查找的字符:");
        String s = input.next();
        
        int count = 0;
        //lastIndexOf(String str):返回指定字符出现的最后一次的下标
        for (int i = 0; i <= string.lastIndexOf(s); i++) {
        /*
            String substring(int star, int end):
            从start开始,到end结束截取字符串。
            包括start,不包括end
         */
            if (s.equals(string.substring(i,i+s.length()))){
                System.out.print(i+"\t");
                i = i+s.length()-1;
                count++;
            }
        }
        System.out.println(s + "    共出现" + count + "次!");
        input.close();
        //JAVA的文件输入输出中的input.close()和output.close()作用?
        //把文件对象关闭,虽然JAVA虚拟机的回收机制会自动关闭。但是就逻辑上来说,一个程序员有必要呼叫这两个方法来达到程序优化的目的.
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

别晃我的可乐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值