Java基本类库和集合框架的使用

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: Java基本类库和集合框架的使用

目录

一、实验目的

二、实验代码

1. 按照身份证判断是否过生日

2.提取字符串里面的数字

3. 身份证隐藏信息

4.字符串实现大小写转换

5.字符串加密与解密

6.银行卡卡号格式化

7. 编写程序,输入一个英文句子,将每个单词的首字符改成大写后再输出。

8. 编写程序,产生随机电话号码,电话号码的前五位是15923,后六位随机产生。

9. 编写程序,随机产生一个4位的验证码,验证码可以包含英文字符的大小和数字。

10. 运用面向对象的程序设计思想,把表1中的学生信息存储在List集合(ArrayList或者LinkedList)中。编写程序实现下列功能:

11. 编程模拟用户注册功能

12. 利用Map存放用户名和密码,请给其中的某个用户修改密码,请输出所有的账号和其对应的密码。

每文一语

 


官方Java帮助手册文档,点击这里下载

一、实验目的

1. 掌握String类和StringBuffer类的使用;

2. 掌握包装类的使用;

3. 掌握集合List、Set和Map的使用;

4. 掌握迭代器Iterator的使用;

5. 了解泛型的作用以及基本使用方法。

二、实验代码

1. 按照身份证判断是否过生日

编写程序:输入一个18位的身份证号码,然后根据其中的出生日期信息判断是否已过生日?并输出以下三个信息中的一个。

This year's birthday has passed.

This year's birthday has not passed.

Today is birthday.

package 作业练习.test3;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Birthday {
    public static void main(String[] args) {
        System.out.println("输入您的身份证号:");
        Scanner reader = new Scanner(System.in);
        String str = reader.nextLine();
        String[] sNum ={str};
        int[] birthTime = new int[1];
        birthTime[0] = Integer.parseInt(sNum[0].substring(10, 14));
        SimpleDateFormat sdf = new SimpleDateFormat("MMdd");//设置格式
        Date date = new Date();//表示当前时间,无法单独输出
        int now = Integer.parseInt(sdf.format(date));//方法
        System.out.println(now);
        // 输出
        for (int i = 0; i < 1; i++) {
            System.out.println(sNum[i]);
            if (now > birthTime[i]) {
                System.out.println("This year's birthday has passed.");
            } else if (now < birthTime[i]) {
                System.out.println("This year's birthday has not passed.");
            } else if (now == birthTime[i]) {
                System.out.println("Today is birthday.");
            }
        }
    }
}


2.提取字符串里面的数字

编写程序剔除一个字符串中的全部非数字字符,例如:将形如“A1BC2you3”中的非数字字符全部剔除,得到字符串“123”,并将“123”转换为int型并输出,如果输入字符串中不含数字,则输出“无数字”。

package 作业练习.test3;
import java.util.Scanner;
public class StringToInt {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        String str = reader.nextLine();
        String newStr = "\\D+";//\d 是一个正字表达式,标识所有数字及0-9
        str = str.replaceAll(newStr, "");
        if (str.length() > 0) {
            int n = Integer.parseInt(str);//parseInt() 方法用于将字符串参数作为有符号的十进制整数进行解析。
            System.out.println(n);
        } else {
            System.out.println("无数字");
        }
    }
}

3. 身份证隐藏信息

编写程序将18位的身份号证号码中表示年份的信息显示为*,其余的字符保持不变(例如:将身份证号码10013319961213602X转换为100133****1213602X显示)。

注意:请分别采用StringBuffer类和String类的方法实现。

package 作业练习.test3;
import java.util.Scanner;
public class Shenfenzheng {
    public static void main(String[] args) {
        System.out.println("输入您的身份证号:");
        Scanner reader = new Scanner(System.in);
        String str = reader.nextLine();
        StringBuilder sb = new StringBuilder(str);
        sb.replace(6, 10, "****");
        System.out.println(sb.toString());
    }
}

4.字符串实现大小写转换

编写程序实现,大小写字母的切换,其他字符不变(例如:输入字符串“I love Java!”则输出为“i LOVE jAVA!”)。

package 作业练习.test3;
import java.util.Scanner;
public class Upper {
    public static void main(String [] args)
    {
        System.out.println("输入字符:");
        String str1 = new Scanner(System.in).nextLine();  //输入字符串
        String str2 = new String();
        char ch;
        for(int i=0;i<str1.length();i++)
        {
            if(Character.isUpperCase(str1.charAt(i)))
            {
                ch = Character.toLowerCase(str1.charAt(i));
                str2+=ch;
            }else if(Character.isLowerCase(str1.charAt(i)))
            {
                ch =Character.toUpperCase(str1.charAt(i));
                str2+=ch;
            }else
            {
                ch =str1.charAt(i);
                str2+=ch;
            }
        }
        System.out.println(str2);
    }
}

5.字符串加密与解密

请设计一个类,封装两个静态方法,分别是字符串加密方法、字符串解密方法。要求:


在对一个指定的字符串加密之后,利用解密方法数能够对密文解密,显示明文信息。加密的方式是将字符串中每个字符加上它在字符串中的位置和一个偏移值 5。以字符串“china”为例,第一个字符“c”在字符串中的位置为 0,那么它对应的密文是“'c'+0+5",即 h。按照这个规则字符串“china”加密为“hnpvj”。

package 作业练习.test3;
import java.util.Scanner;
public class Jiami {
    public static void main(String [] args)
    {
        Scanner scan =new Scanner(System.in);
        char secret ='8';//加密文字符
        System.out.println("请输入你要加密的内容");
        String pass =scan.next();
        System.out.println("原字符串的内容" +pass);
        String secrerult=secret(pass,secret);
        System.out.println("加密后的内容"+secrerult);
        String uncrypresult = secret(secrerult,secret);
        System.out.println("解密后的内容"+uncrypresult);
    }
    public static String secret(String value,char secret)
    {
        byte[] bt =value.getBytes();//将其转化为字符数组
        for(int i=0;i<bt.length;i++)
        {
            bt[i]=(byte)(bt[i]^(int)secret);             //两次位或运算返回
        }
        String newresult =new String(bt,0,bt.length);
        return newresult;
    }
}

6.银行卡卡号格式化

编写程序,实现输入银行卡号,以每4个字符加一个空格显示。例如,假如银行卡号是62220630108589564785130,则输出为6222 0630 1085 8956 4785 130

package 作业练习.test3;
import java.util.*;
public class str6 {
    public static void main(String[] args) {
        System.out.println("请输入你的银行卡号:");
        String bank = new Scanner(System.in).next();
        char[] id = bank.toCharArray();
        String changeid = new String();
        for (int i = 0; i < id.length; i++) {
            if (i % 4 == 0 && i > 0) {
                changeid += ' ';
            }
            changeid += id[i];
        }
        System.out.println(changeid);
    }
}

7. 编写程序,输入一个英文句子,将每个单词的首字符改成大写后再输出。

package 作业练习.test3;
import java.util.Scanner;
public class Exer07 {
    public static void main(String[]args)
    {
        System.out.println("输入一个英文句子");
        String in =new Scanner(System.in).nextLine();
        String [] s=in.split(" ");
        String str2 =new String();
        for(int i=0;i<s.length;i++)
        {
            s[i]=s[i].substring(0,1).toUpperCase()+s[i].substring(1);
            if(i==s.length-1)
            {
                str2=str2+s[i];
            }else
            {
                str2=str2+s[i]+' ';
            }
        }
        System.out.println(str2);
    }
}

8. 编写程序,产生随机电话号码,电话号码的前五位是15923,后六位随机产生。

package 作业练习.test3;
import java.util.Random;
public class Exer08 {
    public static void main(String[] args)
    {
        String firtst_five = "15923";
        String lastsix =new String();
        String Phone =new String();
        Random rnd =new Random();
        for(int i=0;i<6;i++)
        {
            int nmber =rnd.nextInt(10);
            lastsix += nmber;
        }
        Phone =firtst_five+lastsix;
        System.out.println(Phone);
    }
}

9. 编写程序,随机产生一个4位的验证码,验证码可以包含英文字符的大小和数字。

package 作业练习.test3;
import java.util.Random;
class Random_1 {
    public String  string() {
        String ZiMu = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGJKLZXCVBNM1234567890";
        String result = "";
        Random random = new Random();
        for (int i = 0; i < 4; i++) {
            int index = random.nextInt(ZiMu.length());
            char c = ZiMu.charAt(index);
            result += c;
        }
        return result;
    }
    public static void main(String[] args) {
        Random_1 test2 = new Random_1();
        System.out.println(test2.string());
    }
}

10. 运用面向对象的程序设计思想,把表1中的学生信息存储在List集合(ArrayList或者LinkedList)中。编写程序实现下列功能:

表1  学生信息

学号

姓名

出生日期

201644001

张三

1997年2月3日

201644002

李四

1998年11月11日

201644003

王五

1996年3月2日

201644004

赵六

1996年12月12日

201644005

周正

1997年10月10日


(1)创建Student学生类,类中包括三个成员变量,分别为学号、姓名、出生日期,添加不带参数的构造方法,添加含以上三个参数的构造方法,添加各成员变量的 Getter和Setter方法,改写toString()方法(返回字符串格式:学号 姓名 出生日期)


(2)将表1中的学生依次添加到List中;


(3)输出所有的学生信息(使用迭代器Iterator);


(4)有学生(学号:201644006,姓名:李明,出生日期:1998年1月12日)中途入学,将其添加到List集合中;


(5)有学生“王五”中途退学,将其从List集合中删除;


(6)再一次遍历输出所有的学生信息(使用foreach语句)。


(7)输出年龄最小的学生的学号、姓名和出生日期(考虑最小年龄的学生不止一个的情况

package 作业练习.test3;
import java.util.*;
public class Students {
    public String id;//学号
    public String name;//姓名
    public String birth;//出生日期
    Students(){} //不带参数的构造方法
    Students(String id, String name, String birth) //带三个参数的构造方法
    {
        this.id = id;
        this.name = name;
        this.birth = birth;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getBirth() {
        return birth;
    }
    public void setBirth(String birth) {
        this.birth = birth;
    }
    public static void addStudent(List<Students> list)  //增加学生信息
    {
        Scanner sc = new Scanner(System.in);
        boolean flag = false;
        String newStudentid;
        while (true) {
            System.out.println("请输入学号:");
            newStudentid = sc.nextLine();
            for (int i = 0; i < list.size(); i++) {
                Students s = list.get(i);
                if (s.getId().equals(newStudentid)) {
                    flag = true;
                    break;
                }
            }
            if (flag == true) {
                System.out.println("输入的学生已存在,请重新输入");
            } else {
                break;
            }
        }
        System.out.println("请输入学生的姓名");
        String newStudentname = sc.nextLine();
        System.out.println("请输入学生的生日");
        String newStudentbirth = sc.nextLine();
        Students newStudent = new Students();
        newStudent.setId(newStudentid);
        newStudent.setBirth(newStudentbirth);
        newStudent.setName(newStudentname);
        list.add(newStudent);
    }
    public static void print1(List<Students> list) //迭代器Iterator输入所以学生信息
    {
        Iterator<Students> it = list.iterator();
        while (it.hasNext()) {
            Students st = it.next();
            System.out.println("学号:  " + st.id + "姓名:  " + st.name + "生日:  " + st.birth);
        }
    }
    public static void print2(List<Students> list)//用foreach方法输出学生信息
    {
        for (Students obj : list) {
            Students st = obj;
            System.out.println("学号:  " + st.id + "姓名:  " + st.name + "生日:  " + st.birth);
        }
    }
    public static void remove(List<Students> list) {
        System.out.println("请输入你要移除的学生的姓名");
        String movename = new Scanner(System.in).nextLine();
        int index = 0;
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).equals(movename)) {
                index = i;
            }
        }
        list.remove(index);
    }
    public static void main(String[] args) {
        List<Students> list = new ArrayList<Students>();
        while (true) {
            System.out.println("-----------欢迎进入学生信息管理系统-----------");
            System.out.println("请选择相关选项对学生信息进行管理...\n");
            System.out.println("1.查看所有学生信息");
            System.out.println("2.添加学生信息");
            System.out.println("3.删除学生信息");
            System.out.println("4.退出系统\n");
            Scanner sc = new Scanner(System.in);
            // 接收选项数据
            System.out.println("请输入你的选项:");
            String option = sc.nextLine();
            switch (option) {
                case "1":
                    print2(list);
                    break;
                case "2":
                    addStudent(list);
                    break;
                case "3":
                    remove(list);
                    break;
                case "4":
                    System.out.println("退出系统成功!");
                    System.exit(0);
                    break;
                default:
                    System.out.println("\n输入错误,请重新选择!\n");
                    break;
            }
        }
    }
}

11. 编程模拟用户注册功能

要求:利用Set集合存放用户信息(含用户名、昵称、密码),实现用户注册功能,如果用户名已经存在,则无法注册。用户注册成功或者失败,请输出相应的提示信息。注意:用户名不区分大小写。

假定已经存在以下用户信息:

用户名

密码

Tim

112233

Barton

123456

Mary

654321

package 作业练习.test3;
import java.util.HashSet;
import java.util.Iterator;
class Exer09 {
    private String userName;
    private String passWord;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassWord() {
        return passWord;
    }
    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
    @Override
    public String toString() {
        return "userName: " + getUserName() + " passWord: " + getPassWord();
    }
}
    class Set {
        public static void main(String[] args) {
            // 添加初始信息
            Exer09 user1 = new Exer09();
            user1.setUserName("Tim");
            user1.setPassWord("112233");
            Exer09 user2 = new Exer09();
            user2.setUserName("Barton");
            user2.setPassWord("123456");
            Exer09 user3 = new Exer09();
            user3.setUserName("Mary");
            user3.setPassWord("654321");
            // 创建hash对象
            HashSet<Exer09> user = new HashSet<Exer09>();
            user.add(user1);
            user.add(user2);
            user.add(user3);
            // 输出
            Iterator<Exer09> hashIter = user.iterator();
            while (hashIter.hasNext()) System.out.println(hashIter.next());
            // 新用户
            Exer09 newUser = new Exer09();
            newUser.setUserName("tim");
            newUser.setPassWord("112273");
            System.out.println("新的信息:" + newUser.toString());
            // 测试
            if (!user.add(newUser)) System.out.println("已经注册");
            else System.out.println("注册成功");
            // 二次迭代
            hashIter = user.iterator();
            while (hashIter.hasNext()) System.out.println(hashIter.next());
        }
    }

12. 利用Map存放用户名和密码,请给其中的某个用户修改密码,请输出所有的账号和其对应的密码。

要求至少含有4个及以上的用户。

1.请利用Map按表2提供的信息创建一个“专业-学院”对应关系表,编程实现:当用户输入专业名称时,输出所属学院名称。要求:允许用户输入专业时可以有前导或后导空格。

3-2 学院与专业对照表

学院名称

专业

信息学院

计算机科学与技术

物联网工程

软件工程

电气自动化

法政与经贸学院

国际经济与贸易

社会工作

资源与环境经济学

石油工程学院

石油钻井技术

油气开采技术

石油与天然气地质勘探技术

油气储运技术


package 作业练习.test3;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class Map2 {
    public static void main(String[] args) {
        Map<String, String> hm = new HashMap<String, String>();
        hm.put("计算机科学与技术","智能技术与工程");
        hm.put("物联网工程","智能技术与工程");
        hm.put("软件工程","智能技术与工程");
        hm.put("智能科学与技术","智能技术与工程");
        hm.put("物流管理","工商管理");
        hm.put("酒店管理", "工商管理");
        hm.put("人力资源管理", "工商管理");
        hm.put("英语", "外国语");
        hm.put("西班牙语", "外国语");
        Scanner reader = new Scanner(System.in);
        String key = reader.nextLine();
        String key2 = reader.nextLine();
        String nkey = key.trim(); //去掉字符串两端的多余的空格
        String nkey2 = key2.trim();
        hm.put(nkey,nkey2);
        //map输出方法;
        System.out.println(hm);
        hm.clear();
    }
}


相关文章
|
19天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
28天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
28天前
|
消息中间件 Java 数据库连接
Java 反射最全详解 ,框架设计必掌握!
本文详细解析Java反射机制,包括反射的概念、用途、实现原理及应用场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Java 反射最全详解 ,框架设计必掌握!
|
19天前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
25 2
|
23天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
19天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
23天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
23天前
|
Java 开发者
|
2月前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
1月前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
14 1