模块三作业解题思路

模块三作业

第一题

编程统计字符串"ABCD123!@#$%ab"中大写字母、小写字母、数字、其它字符的个数并打 印出来

代码

/*
 * 编程统计字符串"ABCD123!@#$%ab"中大写字母、小写字母、数字、其它字符的个数并打印出来。
 */

public class CountCharTest {
   
    public static void main(String[] args){
   

        // 声明一个变量,并赋值"ABCD123!@#$%ab"
        String str = "ABCD123!@#$%ab";

        // 声明变量来统计个数
        int upperCount = 0;  // 统计大写字母个数
        int intCount = 0;    // 统计数字个数
        int lowerCount = 0;  // 统计小写字母个数
        int otherCount = 0;  // 统计其他字符个数

        // 遍历字符串,取得每个字符,通过ASCII码对应的数值来判断属于哪种类型
        for(int i = 0; i<str.length(); i++){
   
            // 获取字符串str索引为i的字符
            char c = str.charAt(i);
            // 将字符转为ASCII码对应数值
            int num = (int) c;
            // 判断属于哪种类型
            if (65 <= num && num <= 90){
     // 大写字母A-Z 65-90
                upperCount += 1;
            }else if(48 <=num && num <=57){
     // 数字 0-9 48-57
                intCount += 1;
            }else if(97 <= num && num<=122){
     // 小写字母 a-z 97-122
                lowerCount += 1;
            }else{
    // 其他字母
                otherCount += 1;
            }
        }
        // 打印个数统计结果
        System.out.println("大写字母个数为:" + upperCount + ",小写字母个数为:" 
                           + lowerCount +",数字个数为:" + intCount 
                           + ",其他字符的个数为:" + otherCount);
    }
}

解题思路

第一步:

  • 声明字符串变量,赋值要被统计的字符串
  • 声明一些变量,来记录各个类型的数量
        // 声明一个变量,并赋值"ABCD123!@#$%ab"
        String str = "ABCD123!@#$%ab";

        // 声明变量来统计个数
        int upperCount = 0;  // 统计大写字母个数
        int intCount = 0;    // 统计数字个数
        int lowerCount = 0;  // 统计小写字母个数
        int otherCount = 0;  // 统计其他字符个数

第二步:

  • 遍历字符串,取得每个字符,通过ASCII码对应的数值来判断属于哪种类型

  • 将字符转为ASCII码对应数值,和ASCII码对比,得到结果

        // 遍历字符串,取得每个字符,通过ASCII码对应的数值来判断属于哪种类型
        for(int i = 0; i<str.length(); i++){
   
            // 获取字符串str索引为i的字符
            char c = str.charAt(i);
            // 将字符转为ASCII码对应数值
            int num = (int) c;
            // 判断属于哪种类型
            if (65 <= num && num <= 90){
     // 大写字母A-Z 65-90
                upperCount += 1;
            }else if(48 <=num && num <=57){
     // 数字 0-9 48-57
                intCount += 1;
            }else if(97 <= num && num<=122){
     // 小写字母 a-z 97-122
                lowerCount += 1;
            }else{
    // 其他字母
                otherCount += 1;
            }
        }

第三步:

  • 打印最终结果
        // 打印个数统计结果
        System.out.println("大写字母个数为:" + upperCount + ",小写字母个数为:" 
                           + lowerCount +",数字个数为:" + intCount 
                           + ",其他字符的个数为:" + otherCount);

第二题

  • 编程获取两个指定字符串中的最大相同子串。

  • 如: s1=“asdafghjka”, s2=“aaasdfg” 他们的最大子串为"asd"

  • 提示: 将短的那个串进行长度依次递减的子串与较长的串比较

代码

/*
 * 编程获取两个指定字符串中的最大相同子串。
 * 如: s1="asdafghjka", s2="aaasdfg" 他们的最大子串为"asd"
 * 提示: 将短的那个串进行长度依次递减的子串与较长的串比较
 */

public class GetLagerAlikeChar {
   

    public static void main(String[] args){
   
        // 声明两个变量,指定字符串
        String str1 = "asdafghjka";
        String str2 = "aaasdfg";

        // 声明两变量用于记录数据
        int largeCount = 0;     // 记录最大子串的长度
        String largeChar = "";  // 记录最大子串

        // 将字符串str2转为字符数组
        char[] c1 = str2.toCharArray();
        // 循环控制字符串的起始位置和字符串长度
        for(int i = 0; i < str2.length(); i++){
     // 字符数组变字符串的起始位置

            for(int j = i+1; j < str2.length(); j++){
    // 逐步增加字符串长度
                // 形成新的字符串
                String str3 = new String(c1, i, j-i);
                // 判断str1是否包含str3
                boolean result = str1.contains(str3);
                if(result){
    // str1包含str3内容
                    // 获取新字符串的长度
                    int temp = str3.length();
                    if(temp > largeCount){
    // 判断是否比之前的最大还大
                        // 将新字符串赋值给largeChar
                        largeChar = str3;
                        // 将新最大字符串长度赋值给largeCount
                        largeCount = temp;
                    }
                }
            }
        }
        // 打印最大子串
        System.out.println("最大子串为:" + largeChar);
    }

}

解题思路

第一步:

  • 声明变量,指定两个字符串

  • 声明两变量,分别用来记录当前最大子串和最大子串的长度

        // 声明两个变量,指定字符串
        String str1 = "asdafghjka";
        String str2 = "aaasdfg";

        // 声明两变量用于记录数据
        int largeCount = 0;     // 记录最大子串的长度
        String largeChar = "";  // 记录最大子串

第二步:

  • 将较短字符串转为字符数组,便于重新组合新的字符串
  • 通过循环来控制从字符数组中获取字符串的起始位置和字符串长度
  • 判断新形成的字符串是否被较长的字符串所包含
    • 包含则将新形成字符串赋值给最大子串这个变量,将其长度赋值给最大子串长度这个变量
    • 不包含则继续形成下一个新字符串
  • 两层循环结束,则获得最大子串
        // 将字符串str2转为字符数组
        char[] c1 = str2.toCharArray();
        // 循环控制字符串的起始位置和字符串长度
        for(int i = 0; i < str2.length(); i++){
     // 字符数组变字符串的起始位置

            for(int j = i+1; j < str2.length(); j++){
    // 逐步增加字符串长度
                // 形成新的字符串
                String str3 = new String(c1, i, j-i);
                // 判断str1是否包含str3
                boolean result = str1.contains(str3);
                if(result){
    // str1包含str3内容
                    // 获取新字符串的长度
                    int temp = str3.length();
                    if(temp > largeCount){
    // 判断是否比之前的最大还大
                        // 将新字符串赋值给largeChar
                        largeChar = str3;
                        // 将新最大字符串长度赋值给largeCount
                        largeCount = temp;
                    }
                }
            }

第三步:

  • 打印最大子串结果
        // 打印最大子串
        System.out.println("最大子串为:" + largeChar);

第三题

  • 准备一个 HashMap 集合,统计字符串"123,456,789,123,456"中每个数字字符串出现的次数并打印出来。

  • 如:

  • ​ 123 出现了 2 次

  • ​ 456 出现了 2 次

  • ​ 789 出现了 1 次

代码

import java.util.HashMap;
import java.util.Map;

/**
 * 准备一个 HashMap 集合,统计字符串"123,456,789,123,456"中每个数字字符串出现的次数并打印出来。
 *  如:
 * ​    123 出现了 2 次
 * ​    456 出现了 2 次
 * ​    789 出现了 1 次
 */

public class HashMapTest {
   
    
    public static void main(String[] args){
   
        // 声明字符串变量
        String str = "123,456,789,123,456";
        // 声明Map集合
        Map<String, Integer> map = new HashMap<>();
        
        // 按,分割字符串
        String[] strs = str.split(",");
        // 遍历字符串数组,统计每个字符串出现的次数
        for(String str1 : strs){
   
            // 判断以字符串作为key是否已存在集合map中
            if(!map.containsKey(str1)){
    // 不存在则以字符串为key存入集合中
                map.put(str1, 1);
            }else{
    // 存在则将value值+1
                map.put(str1, map.get(str1) + 1);
            }
        }
        
        // 按要求打印
        for(String key : map.keySet()){
   
            System
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值