实验9 常用类
一、实验目的
1.掌握String类的基本构造方法和常用方法的使用;
2.熟悉StringBuffer类的追加、插入、查找、替换、删除等操作; 3.熟悉Math类常量及常用方法的调用;
4.熟悉包装类的功能、重要属性、主要构造器和常用方法; 5.熟悉Date类的主要构造方法和常用方法,明白其不足之处;
6.熟悉GregorianCalendar类的主要构造方法、常用方法,能够正确地创建日历对象、输出日期对象对应的分量及计算两个日期的间隔;
7.熟悉SimpleDateFormat类的主要构造方法、常用方法,掌握格式化输出日期的方法与步骤; 8.熟悉API文档的使用,能够查阅包中类、接口、枚举、异常的相关信息; 9.了解StringTokenizer类的一般使用。
二、 实验内容与步骤
1.运行下列程序,并回答问题:
//字符串的比较
public class StringCompare { }
public static void main(String args[]) { }
String s1 = \; String s2 = \;
String s3 = new String(\); String s4 = new String(\);
System.out.println(\ + (s1 == s2)); System.out.println(\ + (s1 == s3)); System.out.println(\ + (s3 == s4));
System.out.println(\ + s1.equals(s2)); System.out.println(\ + s1.equals(s3)); System.out.println(\ + s3.equals(s4)); System.out.println(\ + s1.compareTo(s3));
问题:
(1) 对于String对象来说,“==”运算符与equals( )方法的功能有什么不同? (2) s1和s2是否指向同一对象?为什么? (3) s3和s4是否指向同一对象?为什么? (4) s1==s3是否成立?为什么? (5) s1、s2、s3、s4的内容是否相同?
(5) compareTo( )方法的功能是什么?当比较结果分别为 负数、正数、0 时,代表什么含义?
2.根据程序注释,将所缺代码补充完整,然后运行程序:
//String类的使用
public class StringTest { }
public static void main(String args[]) { }
// 创建一个以\为参数的String对象 String str = ______________________;
System.out.println(\字符串的长度: \ + ______________); // 输出字符串的长度 System.out.println(\字符串的首字符: \ + ___________);// 输出字符串的首字符 // 输出字符串的最后一个字符
System.out.println(\字符串的最后一个字符: \ + str.charAt(str.length() - 1)); // 输出字符'@'的索引号(即下标)
System.out.println(\字符\\'@\\'的索引号(即下标): \ + _______________); // 输出最后一个点号(.)的索引号(即下标)
System.out.println(\最后一个点号(.)的索引号(即下标): \ + str.lastIndexOf('.')); // 输出该邮箱的用户名(即第一个单词)
System.out.println(\该邮箱的用户名(即第一个单词): \
+ str.substring(0, str.indexOf('@')));
// 输出该邮箱的顶级域名(即最后一个单词)
System.out.println(\该邮箱的顶级域名(即最后一个单词): \ + __________________); // 字符串全部以大写方式输出
System.out.println(\字符串全部以大写方式输出为: \ + ____________________); // 字符串全部以小写方式输出
System.out.println(\字符串全部以小写方式输出为: \ + str.toLowerCase());
(小技巧:如果某一行的内容不会填写,可用//将该行内容注释掉,从面不影响整个程序的运行)
3.根据程序注释,将所缺代码补充完整,再运行程序::
//StringBuffer的增加、删除和修改 public class StringBufferTest {
public static void main(String args[]) {
}
}
char ch[]={'2','0','0','8','年'};
// 创建一个以\北京奥运会开幕时间:\为参数的StringBuffer对象 StringBuffer sb=________________;
______________; // 在sb尾部追加\月8日晚8点\字符串 sb.insert(_____,______);
int n=sb.indexOf(\北京\);
sb.replace(n,_______,\第29届\); // 将字符串中\北京\替换为\第29届\ System.out.println(\替换后,得到的字符串内容为: \+sb.toString());
System.out.println(\字符串的长度为: \+_____________);// 输出字符串的长度 sb.delete(______,18); // 删除字符串中从第6个字符开始到第18个字符为止的内容 System.out.println(\删除字符串后,得到的字符串内容为: \+sb.toString());
// 在sb头部插入字符数组ch的内容
System.out.println(\字符串内容为: \+sb.toString());
4. 运行下列程序,从中体会Math类中静态变量、静态方法的用法:
//Math类的使用
public class MathTest { }
public static void main(String[] args) { }
System.out.println(Math.E); System.out.println(Math.PI); System.out.println(Math.exp(2)); System.out.println(Math.random()); System.out.println(Math.sqrt(10.0)); System.out.println(Math.pow(2, 3)); System.out.println(Math.round(99.4)); System.out.println(Math.abs(-8.88));
5.(提高题)编写一个程序,从编号为1-50的学生中随机产生一等奖1名、二等奖2名、三等奖3名,任何一个学生不能重复中奖,抽奖顺序是:先抽三等奖,再抽二等奖,最后抽一等奖。
6.编写Calculator.java程序,实现功能:从命令行输入两个操作数和运算符,参数格式为:操作数1 运算符 操作数2,其中:两个操作数为double类型,运算符为:+、-、*、/中的一个,程序输出运算结果。
7.分析、填充、运行下列程序,并回答相关问题:
//Date类的使用
import java.util.Date; public class DateTest {
public static void main(String[] args){
}
}
________________________; // 创建一个日期对象now,以记录系统当前时间 System.out.println(\当前日期: \+________);// 输出now对象的内容
Date newDate=new Date(5000000); // 距离GMT 1970.1.1 0:0:0的间隔为5000秒 System.out.println(\新的日期: \+newDate);
System.out.println(\当前日期早于新日期: \+now.before(newDate)); System.out.println(\当前日期晚于新日期: \+now.after(newDate));
System.out.println(\当前时间距离GMT 1970.1.1 00:00:00的毫秒数: \+_______);
问题:
(1)Date类中的时间间隔是以什么为单位来计算的? (2)Date类的getTime()方法的功能是什么? (3)解释程序中 新日期newDate 的输出结果。
8.利用GregorianCalendar的get()方法输出系统的当前时间,输出格式:
9.分析、运行下列程序,从中体会格式化输出日期的用法,并回答相关问题:
//SimpleDateFormatTest类的使用 import java.util.*; import java.text.*;
public class SimpleDateFormatTest {
public static void main(String[] args) {
Calendar now = new GregorianCalendar();
SimpleDateFormat formatter = new SimpleDateFormat();
formatter.applyPattern(\现在时间: yyyy年MM月dd日HH时mm分ss秒 E\); String str = formatter.format(now.getTime()); System.out.println(str);
//伦敦奥运会的开幕时间是2012年7月27日20时12分,即是北京时间:2012年7月28日3时12 分 Calendar london2012 = new GregorianCalendar(2012, 6, 28, 3, 12, 0); // 得到两个时间相差的毫秒数
long distance = london2012.getTimeInMillis() - now.getTimeInMillis(); int days = (int) (distance / (24 * 60 * 60 * 1000)); // 转换为天数 // 剩余的转换为\总秒数\并考虑\四舍五入\ long totalSeconds = Math
.round((distance % (24 * 60 * 60 * 1000)) / 1000.0 + 0.5);
北京时间:xxxx年xx月xx日xx时xx分xx秒。
int hh = (int) (totalSeconds / (60 * 60)); // 转换成小时数
}
}
int mm = (int) ((totalSeconds % (60 * 60)) / 60); // 转换成分钟数 int ss = (int) ((totalSeconds % (60 * 60)) % 60); // 转换成秒钟数
System.out.println(\距离2012年伦敦奥运会开幕式还有:\ + days + \天\ + hh + \时\ + mm
+ \分\ + ss + \秒\);
问题:
(1)SimpleDateFormat类的功能是什么?
(2)SimpleDateFormat类的主要字符串模式有哪些? (3)用SimpleDateFormat类格式化输出日期的步骤是什么? (4)如何计算两个日期相隔的时间长度?
10.(选做题)编写一个Java程序,具备如下功能:
(1)利用输入框一次性输入多名学生的成绩(为整数),成绩间用空格或逗号隔开; (2)计算学生的平均成绩,通过消息框输出。
(提示:利用StringTokenizer类将字符串中的成绩分离出来,之后将它们存放到字符串数组中,再转化成int型数值,计算平均成绩并输出结果。)