一、 实验目的
1、掌握String类和StringBuffer类的特点和区别,并会通过Sting类和StringBuffer类的对象解决实际问题;
2、掌握Math类和Random类的基本特点,并会使用该类的对象解决实际问题;
3、掌握Date类、Calendar类和DateFormat类的用法,并会使用它们解决实际问题。
二、预习与准备
1、String类的构造方法、常用字符串处理方法的应用;
2、Random类的构造方法和生产随机数处理方法的应用;
3、Date类、Calendar类创建日期和时间对象的方法,Calendar类中字段的应用;
4、日期格式类DateFormat、SimpleDateFormat进行字符串和日期对象进行转换的方法。
三、实验内容
1、已知字符串:”this is a test of java”,按要求执行以下操作:
(1) 统计该字符串中字母s出现的次数;
(2) 取出子字符串”test”;
(3) 将本字符串复制到一个字符数组Char[] str中;
(4) 用两种方式实现该字符串的倒叙输出。(用StringBuffer和for循环方式分别实现);
参考代码:
import java.util.Arrays;
public class Test1 {
public static void main(String[] args) {
String str = "this is a test of java";
char[] array = str.toCharArray();
//统计次数
int count=0;
for(char ch:array) {
if(ch=='s') {
count++;
}
}
System.out.println("该字符串中字母s出现:"+count+"次");
//字符串提取
String str2=str.substring(10, 14);
System.out.println(str2);
//字符串复制到新数组
String[] str3=str.split(" ");
System.out.println(Arrays.toString(str3));
//StringBuffer反转
StringBuffer bf=new StringBuffer(str).reverse();
System.out.println(bf);
//for反转
int i;
for (i = array.length - 1; i >=0; i--) {
System.out.print(array[i]);
}
}
}
运行结果:
2 .如下字符串:
01#张三#2002#李四#1803#王五#2204#赵六#2005#田七#21,分割出每个人的信息,样式如下:
*01 张三 20
*02 李四 18
……
创建Student类,属性:学号 姓名 年龄,完成下面的要求:
(1)将这些Student对象放进数组中;
(2)查询里面有没有叫田七的学生如果存在则打印学生的具体信息(封装成方法,键盘输入姓名);
(3)计算所有学生的平均年龄,最大年龄,最小年龄。
参考代码:
import java.util.Scanner;
class Student {
String num;
String name;
int age;
public Student() {
super();
}
public Student(String num, String name, int age) {
super();
this.num = num;
this.name = name;
this.age = age;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [num=" + num + ", name=" + name + ", age=" + age + "]";
}
}
public class Test2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str = "01#张三#20*02#李四#18*03#王五#22*04#赵六#20*05#田七#21";
String[] strs = str.split("[#*]");
System.out.println("1.按要求打印如下:");
for (int i = 0; i < strs.length; i += 3) {
System.out.print(strs[i] + " " + strs[i + 1] + " " + strs[i + 2]);
System.out.println();
}
// 建立学生数组
Student[] arr = new Student[strs.length / 3];
int count = 0;
for (int i = 0; i < arr.length; i++) {
arr[i] = new Student(strs[count], strs[count + 1], Integer.parseInt(strs[count + 2]));
count += 3;
}
System.out.println("2.查询里面有没有叫田七的学生如果存在则打印学生的具体信息:");
System.out.println("请输入学生姓名:");
String name = input.next();
for (int i = 0; i < arr.length; i++) {
if (name.equals(arr[i].getName())) {
System.out.print(arr[i].getNum() + " " + arr[i].getName() + " " + arr[i].getAge());
}
}
System.out.println();
// 3.计算所有学生的平均年龄,最大年龄,最小年龄
System.out.println("3.计算所有学生的平均年龄,最大年龄,最小年龄:");
int ageSum = 0;
int ageMax = arr[0].getAge();
int ageMin = arr[0].getAge();
for (int i = 0; i < arr.length; i++) {
ageSum += arr[i].getAge();
ageMax = ageMax > arr[i].getAge() ? ageMax : arr[i].getAge();
ageMin = ageMin < arr[i].getAge() ? ageMin : arr[i].getAge();
}
System.out.println("所有学生的平均年龄:" + ageSum / arr.length);
System.out.println("所有学生中的最大年龄:" + ageMax);
System.out.println("所有学生中的最小年龄:" + ageMin);
}
}
运行结果:
3、编写程序,(Scanner)当以年-月-日的格式输入一个日期时,输出其该年是否为闰年,该月有几天,该日是星期几。
参考代码:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入日期:");
String str = sc.nextLine();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = sdf.parse(str);
} catch (Exception e) {
e.printStackTrace();
}
//把Date类型转为Calendar类型
Calendar c = Calendar.getInstance();
c.setTime(date);
//提取年月日
int year = c.get(Calendar.YEAR);
GregorianCalendar gc = new GregorianCalendar();
if(gc.isLeapYear(year)){
System.out.println(year+"是闰年");
}else{
System.out.println(year+"不是闰年");
}
//获得月字段天数的最大值
int day = c.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("该月有"+day+"天");
//获得周几
int i = c.get(Calendar.DAY_OF_WEEK) - 1;
String week = "";
try {
week = pipei(i);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("今天是周"+week);
}
public static String pipei(int i) throws Exception {
String s = "";
switch (i) {
case 0:
s = "日";
break;
case 1:
s = "一";
break;
case 2:
s = "二";
break;
case 3:
s = "三";
break;
case 4:
s = "四";
break;
case 5:
s = "五";
break;
case 6:
s = "六";
break;
default:
System.out.println(("超出了正常一周范围"));
}
return s;
}
}
运行结果:
四、实验小结
通过本次实验掌握了String类和StringBuffer类的特点和区别,学会了StringBuffer类的用法以及String类的构造方法、常用字符串处理方法的应用。在日期处理中,常用的类有Date类,Calendar类,DateFormat 类,掌握了日期格式类DateFormat、SimpleDateFormat进行字符串和日期对象进行转换。