首页 > 编程语言 >Java第八天(实训学习整理资料(七)练习题)

Java第八天(实训学习整理资料(七)练习题)

时间:2024-11-05 16:46:15浏览次数:3  
标签:练习题 字符 Java Scanner System println 实训 字符串 out

练习:


1、输入一个字符串和一个数字,数字表示字节个数,然后按照指定的字节个数来截取这个字符串,要求不准出现半个字符的现象
2、输入一个字符串,提取这个字符串中的数字并求和 -> sdf85dfghd72s6 -> 8 5 7 2 6 -> 28
3、输入一个字符串,提取这个字符串中的数字并排序->sdf85dfghd72s6 -> 8 5 7 2 6 -> 2 5 6 7 8
4、输入一个字符串,利用charAt方法判断这个字符串是否是一个回文字符串
5、输入一个字符串,统计每个字符出现的个数---hsoafngifaoa -> h:1 s:1 o:2 a:3 f:2 n:1 g:2 i:1

package day1031;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;



public class Demo02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int num;
        do {
            System.out.println("请输入要执行的序号:" + "\n" + "\t" + "1:截取字符串" + "\n" + "\t" + "2:提取数字并求和" + "\n" + "\t" + "3:提取数字并排序 " + "\n" + "\t" + "4:回文字符串 " + "\n" + "\t" + "5:统计出现次数 " + "\n" + "\t" + "6:退出 ");
            num = sc.nextInt();
            switch (num) {
                case 6:
                    System.out.println("已退出!");
                    break;
                case 1:

                    /**
                     * 截取字符串
                     */

                    Scanner scanner = new Scanner(System.in);
                    System.out.println("请输入一个字符串:");
                    String inputString = scanner.nextLine();
                    System.out.println("请输入字节数(整数):");
                    int byteCount = scanner.nextInt();

                    // 确保字节数不超过字符串长度,并转换为字符数,因为一个UTF-8字符通常占用1到4个字节
                    double charCount = Math.min(byteCount * 1.25, inputString.length());

                    // 如果字节数不足以构成一个完整字符,那么返回字符串而不是截断结果
                    if (charCount == 0 || charCount % 1 != 0) {
                        System.out.println("由于字节限制,可能现已出现半个字符的情况。请重新输入一个完整的字符数。");
                        return;
                    }

                    // 截取字符串
                    String cutstring = inputString.substring(0, (int) charCount);
                    // 打印输出按要求截取的字符串
                    System.out.println("按照指定字节数截取的字符串是: " + cutstring);
                    break;
                case 2:

                    /**
                     * 提取数字并求和
                     */

                    Scanner s = new Scanner(System.in);
                    System.out.println("请输入一个包含数字的字符串:");
                    String input = s.nextLine();

                    // 正则表达式匹配所有的数字
                    Pattern pattern = Pattern.compile("\\d()+");
                    Matcher matcher = pattern.matcher(input);
                    // 定义一个sum来存储符合条件的数字
                    int sum = 0;
                    while (matcher.find()) {
                        // 将找到的数字添加到总和中
                        sum += Integer.parseInt(matcher.group());
                    }
                    // 打印输出满足条件的数字之和
                    System.out.println("字符串中的数字之和是: " + sum);


                    break;

                case 3:

                    /**
                     *提取数字并排序
                     */

                    Scanner scan = new Scanner(System.in);
                    System.out.println("请输入一个包含数字的字符串:");
                    String input1 = scan.nextLine();
                    // extractAndSortNumbers:提取和排序数字
                    // 将键盘录入的信息传进下面定义的extractAndSortNumbers方法进行判断,并存入名为numbers的int数组中
                    int[] numbers = extractAndSortNumbers(input1);
                    // 打印输出名为numbers的这个数组
                    System.out.println(Arrays.toString(numbers));
                    break;

                case 4:

                    /**
                     * 回文字符串
                     */
                    Scanner scann = new Scanner(System.in);
                    System.out.println("请输入一个回文的字符串进行测试:");
                    String input2 = scann.nextLine();
                    // isPalindrome表示:判断一个字符串是否为回文字符串
                    // 将键盘录入的信息传进下面定义isPalindrome的方法进行判断,并用名为isPalindrome的布尔类型返回值
                    boolean isPalindrome = isPalindrome(input2);
                    // 打印输出名
                    System.out.println(isPalindrome);


                    break;

                case 5:

                    /**
                     * 统计出现次数
                     */

                    Scanner scanne = new Scanner(System.in);
                    System.out.println("请输入一个字符串进行测试:");
                    String input3 = scanne.nextLine();

                    // countCharFrequency表示:计算字符频率
                    // HashMap<Character, Integer>方法表示:可以用于存储字符到其他类型值的映射,例如统计字符出现的频率、构建字符到其对应信息的映射等
                    // 这里可以用来表示统计字符串中每个字符出现的次数‌
                    HashMap<Character, Integer> charFrequency = countCharFrequency(input3);
                    System.out.println("每个字符出现的次数如下:");
                    // 使用foreach语句遍历并打印
                    for (Character ch : charFrequency.keySet()) {
                        System.out.println(ch + ": " + charFrequency.get(ch));
                    }

                    break;
                default:
                    System.out.println("输入无效,请重新输入一个正确的序号!");
                    break;
            }
        } while (num != 6);
    }



    /**
     * 提取数字并排序
     * @param input
     * @return
     */
    public static int[] extractAndSortNumbers(String input) {
        // 用正则表达式提取出数字
        Pattern pattern = Pattern.compile("\\d()+");
        Matcher matcher = pattern.matcher(input);
        // 创建一个以numberList为名的ArrayList对象,用来存储Integer类型的元素
        ArrayList<Integer> numbersList = new ArrayList<>();
        // 调用Java中的Matcher类下面的matcher.find查找匹配子序列并返回布尔值方法进行循环查找
        while (matcher.find()) {
            // matcher.group()方法表示:在Java正则表达式中用于获取与正则表达式匹配的文本。
            // Integer.parseInt()方法表示:将字符串转换为整数
            // numbersList.add()方法表示:添加元素
            numbersList.add(Integer.parseInt(matcher.group()));
        }
        // 创建一个名为numbers的int数组用来存储获取的元素数量
        // numbersList.size()方法表示:获取List中当前存在的元素数量‌。它始终返回当前存在的元素数量,无论列表中是否包含重复元素或空值。
        int[] numbers = new int[numbersList.size()];
        for (int i = 0; i < numbersList.size(); i++) {
            // numbersList.get()方法表示:是Java中List接口的一个方法,用于获取列表中指定索引位置的元素。
            numbers[i] = numbersList.get(i);
        }
        // Arrays.sort方法表示:对数组进行排序,它可以对数组中的元素进行排序,默认情况下是按照从小到大的顺序进行排序。
        Arrays.sort(numbers);
        return numbers;
    }

    /**
     * 回文字符串
     * @param s
     * @return
     */
        public static boolean isPalindrome(String s) {
            // 定义开始和结束
            int start = 0;
            int end = s.length() - 1;
            // 用while循环判断
            while (start < end) {
                // 开头和结尾不相同则不是回文字符串
                if (s.charAt(start) != s.charAt(end)) {
                    return false;
                }
                start++;
                end--;
            }
            return true;
        }

    /**
     * 统计出现次数
     * @param input
     * @return
     */
    public static HashMap<Character, Integer> countCharFrequency(String input) {
        // 定义一个名为frequencyMap的空的哈希映射(HashMap),键是字符型Character,值是整数类型Integer,
        // 用来存放字符及其对应的出现次数
        HashMap<Character, Integer> frequencyMap = new HashMap<>();
        // 使用for-each循环遍历输入字符串的所有字符,将其转换成字符数组
        for (char ch : input.toCharArray()) {
            // 对于数组中的每一个字符(ch),从frequencyMap方法中获取该字符当前的计数值(默认为0,如果该字符未存在于映射中)则当前计数值+1
            frequencyMap.put(ch, frequencyMap.getOrDefault(ch, 0) + 1);
        }
        // 遍历结束后返回包含所有字符频率信息的frequencyMap
        return frequencyMap;
    }
}

标签:练习题,字符,Java,Scanner,System,println,实训,字符串,out
From: https://blog.csdn.net/Li_030406/article/details/143475659

相关文章

  • JavaOOP01——对象定义
    目录一、 面向对象概念二、面向对象程序设计步骤三、封装步骤 四、构造方法及重载 五、this()形成构造函数链 六、基本数据类型与包装类 七、Integer 类基本介绍一、 面向对象概念 面向对象编程(Object-OrientedProgramming,OOP)是一种编程范式,它使用“对象......
  • 关于idea连接数据库时报错:Cannot run program E:\IntelliJ_IDEA_2023.3.4\jbr\bin
    问题说明连接mysql数据库时在点击testconnection时弹出的问题:CannotrunprogramE:\IntelliJ_IDEA_2023.3.4\jbr\bin\javacreateprocesserror=5,拒绝访问查询多个网站都没有找到解决方案。解决方法点击左侧Drivers,找到MySQL右侧点击Advanced在最下方的VMhome......
  • rsyslog使用 imfile 模块合并两个主机上多个java的日志
    要使用Rsyslog的imfile模块来一对一合并两个主机上多个Java应用程序的日志,你需要在每个Java主机上配置Rsyslog以使用imfile模块监视Java日志文件的更改,并将这些更改发送到中央日志服务器。然后,在中央日志服务器上,你可以配置Rsyslog来接收这些日志并将它们合并到一个日志文件中。......
  • java计算机毕业设计基于springboot的游戏交易网络无忧(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着游戏产业的迅猛发展,游戏交易市场日益庞大。然而,当前的游戏交易环境面临着诸多挑战。一方面,游戏交易涉及到众多参与者,包括普通用户和卖家用户......
  • java计算机毕业设计基于java的学生宿舍管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着教育事业的不断发展,学校规模逐渐扩大,学生人数日益增多,学生宿舍管理工作变得愈发复杂和繁琐。传统的学生宿舍管理方式主要依赖手工记录和人工......
  • 【Java】常用类方法记录
    Arrays类java.util.Arrays返回类型方法描述static<T>List<T>asList(T…a)返回由指定数组支持的固定大小的列表。staticintbinarySearch(byte[]a,bytekey)使用二进制搜索算法在指定的字节数组中搜索指定的值。staticintbinarySearch(byte[]a,intfromIndex,in......
  • java计算机毕业设计大学生信息交流平台(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容大学生信息交流平台研究相关内容一、研究背景随着互联网技术的飞速发展,当代大学生的学习和生活方式发生了深刻的变革。在大学校园这个充满活力和创新的环境......
  • java计算机毕业设计城市垃圾分类回收管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容城市垃圾分类回收管理系统的相关研究一、研究背景随着城市化进程的迅猛发展,城市垃圾产量呈现出急剧增长的态势。传统的垃圾处理模式,如简易堆放或填埋,已经暴......
  • java毕业设计下载(全套源码+配套论文)——基于java+JSP+MyEclipse的网上订餐系统设计与
    基于java+JSP+MyEclipse的网上订餐系统设计与实现(毕业论文+程序源码)大家好,今天给大家介绍基于java+JSP+MyEclipse的网上订餐系统设计与实现,更多精选毕业设计项目实例见文末哦。文章目录:基于java+JSP+MyEclipse的网上订餐系统设计与实现(毕业论文+程序源码)1、项目简介2......
  • 基于java中的SSM框架实现新能源汽车在线租赁管理系统项目【内附项目源码+论文说明】
    基于java中的SSM框架实现新能源汽车在线租赁管理系统演示【内附项目源码+LW说明】摘要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,新能源汽车在线租赁当然也不能排除在外。新能源汽车在线租赁是以实际运用......