一、 上机目的和要求:
- 掌握String类和StringBuffer类的使用;
- 掌握Math和Random类的使用;
- 掌握包装类的使用;
- 掌握日期和时间的处理方法;
- 掌握集合List、Set和Map的使用;
- 掌握迭代器Iterator的使用,掌握for-each循环语句的使用;
- 了解泛型的作用以及基本使用方法。
1.编写程序:剔除一个字符串中的全部非数字字符,例如:将形如“A1BC2you3”中的非数字字符全部剔除,得到字符串“123”,并将“123”转换为123(int型),如果输入的字符串中不含数字,则输出“无数字”。
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("无数字");
}
}
}
运行结果:
- 编写程序:输入一个18位的身份证号码,然后根据其中的出生日期信息判断是否已过生日?并输出以下三个信息中的一个。
This year’s birthday has passed.
This year’s birthday has not passed.
Today is birthday.
public class Birthday {
public static void main(String[] args) {
// 身份证
String[] sNum = {"000026200504016365", "00002619991231636X", "00002619991230636X"};
// 取生日
int[] birthTime = new int[3];
birthTime[0] = Integer.parseInt(sNum[0].substring(10, 14));
birthTime[1] = Integer.parseInt(sNum[1].substring(10, 14));
birthTime[2] = Integer.parseInt(sNum[2].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 < 3; 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.");
}
}
}
}
运行结果:
- 运用面向对象的程序设计思想,把表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中;
对于list接口 不太了解的童鞋可以查看:
https://www.cnblogs.com/zcscnn/p/7743507.html
(3)输出所有的学生信息(使用迭代器Iterator);
(4)有学生(学号:201644006,姓名:李明,出生日期:1998年1月12日)中途入学,将其添加到List集合中;
(5)有学生“王五”中途退学,将其从List集合中删除;
(6)再一次遍历输出所有的学生信息(使用foreach语句)。
(7)输出年龄最小的学生的学号、姓名和出生日期(考虑最小年龄的学生不止一个的情况)
class Student {
private Integer sno;
private String sname;
private String sbirth;
public Integer getSno() {
return sno;
}
public void setSno(Integer sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSbirth() {
return sbirth;
}
public void setSbirth(String sbirth) {
this.sbirth = sbirth;
}
Student() {};
public Student(int sno,String sname,String sbirth ){
this.sno=sno;
this.sname=sname;
this.sbirth=sbirth;
};
@Override
public String toString() {
return "sno:" + getSno() + " sname:" + getSname() + " sbirth:" + getSbirth();
}
}
public class StudentMain {
public static void main(String[] args) {
// 创建学生对象并初始化
Student s1 = new Student();
s1.setSno(201644001);
s1.setSname("张三");
s1.setSbirth("1997年02月03日");
Student s2 = new Student();
s2.setSno(201644002);
s2.setSname("李四");
s2.setSbirth("1998年11月11日");
Student s3 = new Student();
s3.setSno(201644003);
s3.setSname("王五");
s3.setSbirth("1996年03月02日");
Student s4 = new Student();
s4.setSno(201644004);
s4.setSname("赵六");
s4.setSbirth("1996年12月12日");
Student s5 = new Student();
s5.setSno(201644005);
s5.setSname("周正");
s5.setSbirth("1997年10月10日");
// 创建ArrayList 并添加学生信息
List<Student> Astu = new ArrayList<Student>();//这句创建了一个ArrayList实现类的对象后把它上溯到了List接口。
//此时它就是一个List对象了,它有些ArrayList类具有的,但是List接口没有的属性和方法,它就不能再用了
Astu.add(s1);
Astu.add(s2);
Astu.add(s3);
Astu.add(s4);
Astu.add(s5);
// 迭代器输出
ListIterator<Student> listIter = Astu.listIterator();
if (listIter.hasNext()) { // 如果有后继元素
System.out.println("我的迭代器输出:"+Astu);
}
// 添加新同学
Student newStu = new Student();
newStu.setSno(201644006);
newStu.setSname("李明");
newStu.setSbirth("1998年1月12日");
Astu.add(newStu);
// 删除王五
Astu.remove(s3);
// foreach语句输出,明显麻烦很多,而且慢很多。
for (Student stu : Astu) {
System.out.println(stu.getSno() + " " + stu.getSname() + " " + stu.getSbirth());
}
// 输出年龄最小的童鞋
int n = 0;
List<Student> minStu = new ArrayList<Student>(); // 创建ArrayList 存放最小的学生
for (Student stu : Astu) {
String birth = stu.getSbirth();
birth = birth.replaceAll( "\\D+", "");
int t = Integer.parseInt(birth);
// System.out.println(t);
if (t > n) {
n = t;
for (int i = 0; i < minStu.size(); i++) {
minStu.remove(i);
}
minStu.add(stu);
} else if (t == n) {
minStu.add(stu);
}
}
System.out.println("最小的学生:");
for (Student stu : minStu) {
System.out.println(stu.getSno() + " " + stu.getSname() + " " + stu.getSbirth());
}
}
}
运行结果:
4、 编程模拟用户注册功能,要求:利用Set集合存放用户信息(含用户名、昵称、密码),实现用户注册功能,如果用户名已经存在,则无法注册。用户注册成功或者失败,请输出相应的提示信息。注意:用户名不区分大小写。
假定已经存在以下用户信息:
class userInfo {
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();
}
}
public class Set {
public static void main(String[] args) {
// 添加初始信息
userInfo user1 = new userInfo();
user1.setUserName("Tim");
user1.setPassWord("112233");
userInfo user2 = new userInfo();
user2.setUserName("Barton");
user2.setPassWord("123456");
userInfo user3 = new userInfo();
user3.setUserName("Mary");
user3.setPassWord("654321");
// 创建hash对象
HashSet<userInfo> user = new HashSet<userInfo>();
user.add(user1);
user.add(user2);
user.add(user3);
// 输出
Iterator<userInfo> hashIter = user.iterator();
while (hashIter.hasNext()) System.out.println(hashIter.next());
// 新用户
userInfo newUser = new userInfo();
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());
}
}
运行结果:
5、 请利用Map按表2提供的信息创建一个“专业-学院”对应关系表,编程实现:当用户输入专业名称时,输出所属学院名称。要求:允许用户输入专业时可以有前导或后导空格。
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("英语", "外国语");
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();
}
}
运行结果: