目录
7. 编写程序,输入一个英文句子,将每个单词的首字符改成大写后再输出。
8. 编写程序,产生随机电话号码,电话号码的前五位是15923,后六位随机产生。
9. 编写程序,随机产生一个4位的验证码,验证码可以包含英文字符的大小和数字。
10. 运用面向对象的程序设计思想,把表1中的学生信息存储在List集合(ArrayList或者LinkedList)中。编写程序实现下列功能:
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(); } }