栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用Java技术解决“统计一个字符串中每个字符出现的次数”问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Java技术解决“统计一个字符串中每个字符出现的次数”问题

使用Java技术解决“统计一个字符串中每个字符出现的次数”问题
  • Java开发-JavaSE阶段-统计一个字符串中每个字符出现的次数
    • 前言
    • 源码 (设计思路在文章底部)
    • 设计与实现思路:
        • 设计思路:
        • 实现思路:
    • 总结

Java开发-JavaSE阶段-统计一个字符串中每个字符出现的次数 前言
  1. 这是一道JavaSE进阶阶段的作业 ;
  2. 主要利用到的是String,StringBuilder的常用方法进行解决 ;
  3. 由于本阶段还没有学到集合,IO流等等知识,所以输入采用Scanner ;
源码 (设计思路在文章底部)
 public class Day16HomeWork {
	// 字符出现次数的统计单独封装成方法,供main方法调用
    public void testAppearCounts2() {
        // 10、统计一个字符串中每个字符出现的次数
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入字符串:");
        String str1 = scanner.nextLine();

        StringBuilder source = new StringBuilder(str1); // String转换成可变长的StringBuilder,用于删除已经被遍历的重复字符
        int count = 0; // 计数
        int index = 0; // 被遍历元素的下标

        String subStr = "";
        while (source.length() != 0) { // 由于每遍历一次,source的长度可能都会变短,要做好安全机制

            subStr = source.substring(0, 1); // 每次截取出一个字符(每遍历完一次,都会把遍历的字符给删除,所以下一次都为0开始,截取一个字符长度)

            count = 0; // 每次重新循环的时候,count归0
            index = 0;

            while ((index = source.indexOf(subStr, index)) != -1) { // 找元素下标返回值只要不是-1,都是找得到
                count++;
                source.deleteCharAt(index); // 删除指定位置的字符,避免后面再次重复遍历
            }
            System.out.println(subStr + " 出现的次数为:" + count + " 次");
        }
    }

	// main方法调用
	    public static void main(String[] args) {
        Day16HomeWork day16HomeWork = new Day16HomeWork();
        day16HomeWork.testAppearCounts2();
    }
 }
设计与实现思路: 设计思路:

1、统计字符出现的次数,首先让用户通过Scanner在控制台输入字符串;
2、取出这个字符串的每一个字符,然后统计每个字符出现的次数!

实现思路:

1、用户输入字符串后,直接将这个字符串通过StringBuilder的有参构造保存;由于StringBuilder底层并不像String一样是"final char value[];",而是采用“char[] value;”,所以StringBuilder底层的数组长度是可变长的,意味着我们在每次找到字符完毕后,可以将这个字符从StringBuilder中删除,查找下一个字符的时候就是单独下一个字符;
2、String 转换为 StringBuilder:new StringBuilder(放用户输入的字符串);
3、删除StringBuilder中对应的字符:StringBuilder对象.deleteCharAt(下标);
4、通过索引下标在StringBuilder查找指定字符:StringBuilder对象.substring(起始索引, 结束索引) // 注意:结束索引是取不到的,此方法取值范围相当于数学中的左开右闭区间
5、保证每次在这个字符串中的字符都能遍历完才能正确统计次数:采用StringBuilder对象.indexOf(当前被遍历的字符, 索引下标) // 从 “索引下标” 位置开始查找“当前被遍历的字符”在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
6、采用双重while循环,内层负责统计当前被统计字符的次数,每次统计完毕后通过下标删除对应的已经被统计的字符,减少整个StringBuilder对象的长度的同时,保证下一次不会重复统计;外层while循环判断当前StringBuilder对象的长度是否为0,不为0则还有要统计的字符,为0则代表所有的字符已经统计完毕。

总结

第一次写博客,可能有很多不足,比如:目前本题只考虑能够实现功能,并没有考虑到算法的优化!
如果这篇博客对您有帮助,还请多多支持一下;
如果这篇博客有什么不足,还请评论区多多指正或者补充。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027376.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号