学号 20175206 《Java程序设计》第七周学习总结
教材学习内容总结
第八章:
主要内容
String类
StringTokenizer类
Scanner类
StringBuffer类
Date与Calendar类
日期格式化
Math、BigInteger与Random类
数字格式化
Class类与Console类
Pattern与Match类
重点和难点
重点:字符串的常用方法;字符串分析器使用;类Date和类Calendar以及类Math的使用
难点:字符串分析器的使用;各常用类的实际运用
String类
Java专门提供了用来处理字符序列的String类。
String类在java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使用String类。
需要注意的是Java把String类声明为final类,因此用户不能扩展String类,即String类不可以有子类。
StringTokenizer类
本节学习怎样使用StringTokenizer对象分解String对象的字符序列。
StringTokenizer类在java.util包中,有两个常用的构造方法:
StringTokenizer(String s):为String对象s构造一个分析器。使用默认的分隔标记,即空格符、换行符、回车符、Tab符、进纸符做分隔标记。
StringTokenizer(String s, String delim为String对象s构造一个分析器。参数delim的字符序列中的字符的任意排列被作为分隔标记。
StringTokenizer对象称作一个字符串分析器可以使用下列方法:
(1) nextToken():逐个获取字符串中的语言符号(单词),字符串分析器中的负责计数的变量的值就自动减一 。
(2) hasMoreTokens():只要字符串中还有语言符号,即计数变量的值大于0,该方法就返回true,否则返回false。
(3)countTokens():得到分析器中计数变量的值。
Scanner类
使用Scanner类从字符串中解析程序所需要的数据。
Scanner对象可以解析字符序列中的单词,例如,对于String对象NBA
String NBA = "I Love This Game";
为了解析出NBA的字符序列中的单词,可以如下构造一个Scanner对象。
Scanner scanner = new Scanner(NBA);
Scanner对象可以调用方法
useDelimiter(正则表达式);
将正则表达式作为分隔标记,即让Scanner对象在解析操作时,把与正则表达式匹配的字符序列作为分隔标记。如果不指定分隔标记,那么Scanner对象默认地用空白字符:空格,制表符,回行符作为分隔标记来解析String对象的字符序列中的单词。
scanner将空格做为分隔标记来解析字符序列中的单词,具体解析操作:
scanner调用next()方法依次返回NBA中的单词,如果NBA最后一个单词已被next()方法返回,scanner调用hasNext()将返回false,否则返回true。
对于被解析的字符序列中的数字型的单词,比如618,168.98等,scanner可以用nextInt()或nextDouble()方法来代替next()方法,即scanner可以调用nextInt()或nextDouble()方法将数字型单词转化为int或double数据返回。
如果单词不是数字型单词,scanner调用nextInt()或nextDouble()方法将发生InputMismatchException异常,在处理异常时可以调用next()方法返回该非数字化单词。
Scanner对象可以调用 useDelimiter(正则表达式); 方法将一个正则表达式作为分隔标记,即和正则表达式匹配的字符串都是分隔标记。
StringBuffer类
String对象的字符序列是不可修改的,也就是说,String对象的字符序列的字符不能被修改、删除,即String对象的实体是不可以再发生变化的。
StringBuffer类的对象的实体的内存空间可以自动地改变大小,便于存放一个可变的字符序列。
Date与Calendar类
Date类
Date类在java.util包中.
Date类的构造方法之一:
Date()使用Date类的无参数构造方法创建的对象可以获取本地当前时间。
Date类的构造方法之二:
Date(long time)使用long型参数创建指定的时间
计算机系统将其自身的时间的“公元”设置在1970年1月1日0时(格林威治时间),可以根据这个时间使用Date的带参数的构造方法:Date(long time)来创建一个Date对象
Calendar类
Calendar类在java.util包中。
使用Calendar类的static方法 getInstance()可以初始化一个日历对象,
calendar对象可以调用方法:
public long getTimeInMillis() 可以将时间表示为毫秒。
public final void setTime(Date date)使用给定的 Date 设置此 Calendar 的时间
public int get(int field) :可以获取有关年份、月份、小时、星期等信息
日期的格式化
format方法
Formatter类的format方法:
format(格式化模式, 日期列表)
按着“格式化模式”返回“日期列表”中所列各个日期中所含数据(年,月,日,小时等数据)的字符串表示。
Java已经将format方法做为了String类的静态方法,因此,程序可以直接使用String类调用format方法对日期进行格式化。
1)格式化模式
format方法中的“格式化模式”是一个用双引号括起的字符序列(字符串),该字符序列中的字符由时间格式符和普通字符所构成。
2)日期列表
format方法中的“日期列表”可以是用逗号分隔的Calendar对象或Date对象。
format方法默认按从左到右的顺序使用“格式化模式”中的格式符来格式“日期列表”中对应的日期,而“格式化模式”中的普通字符保留原样。
3)格式化同一日期
可以在“格式化模式”中使用“<”,比如:"%ty-%<tm-%<td"中的三个格式符将格式化同一日期,即含有“<”的格式符和它前面的格式符格式同一个日期,例如:String s = String.format("%ty年%<tm月%<td日",new Date());那么%<tm和%<td都格式化new Date(),因此字符串s就是:"11年02月10日"。
不同区域的星期格式
如果想用特定地区的星期格式来表示日期中的星期,可以用format的重载方法:
format (Locale locale,格式化模式,日期列表);
其中的参数locale是一个Locale类的实例,用于表示地域。
Locale类的static常量都是Locale对象,其中US是表示美国的static常量。
Class类与Console类
1.使用Class的类方法得到一个和某类(参数className指定的类)相关的Class 对象,
public static Class forName(String className) throws ClassNotFoundException
上述方法返回一个和参数className指定的类相关的Class对象。如果类在某个包中,className必须带有包名,例如, className="java.util.Date"。
2.步骤1中获得的Class对象调用
public Object newInstance() throws Exception,
方法就可以得到一个className类的对象
要特别注意的是:使用Class对象调用newInstance()实例化一个className类的对象时,className类必须有无参数的构造方法。
得到匹配对象
Pattern与Matcher类
Java提供了专门用来进行模式匹配的Pattern类和Matcher类,这些类在java.util.regex包中。
以下结合具体问题来讲解使用Pattern类和Matcher类的步骤。假设有字符串:
String input = "hello,good morning,this is a good idea"
我们想知道input从哪个位置开始至哪个位置结束曾出现了字符串good。
使用Pattern类和Matcher类检索字符串str中的子字符串的步骤如下:
建立模式对象
使用正则表达式regex做参数得到一个称为模式的Pattern类的实例pattern:
例如:String regex = "good";
Pattern pattern = Pattern.compile(regex);
模式对象是对正则表达式的封装。Pattern类调用类方法compile(String regex)返回一个模式对象,其中的参数regex是一个正则表达式, 称为模式对象使用的模式。
得到匹配对象
模式对象pattern调用matcher(CharSequence input)方法返回一个Matcher对象matcher,称为匹配对象
Matcher matcher = pattern.matcher(input);
Matcher对象matcher可以使用下列方法寻找字符串input中是否有和模式regex匹配的子序列(regex是创建模式对象pattern时使用的正则表达式)。
public boolean find():寻找input和regex匹配的下一子序列,如果成功该方法返回true,否则返回false。
public boolean matches():matcher调用该方法判断input是否完全和regex匹配。
public boolean lookingAt():matcher调用该方法判断从input的开始位置是否有和regex匹配的子序列。
public boolean find(int start) : matcher调用该方法判断input从参数start指定位置开始是否有和regex匹配的子序列 。
public String replaceAll(String replacement) matcher调用该方法可以返回一个字符串,该字符串是通过把input中与模式regex匹配的子字符串全部替换为参数replacement指定的字符串得到的.
public String replaceFirst(String replacement) matcher调用该方法可以返回一个字符串,该字符串是通过把input中第1个与模式regex匹配的子字符串替换为参数replacement指定的字符串得到的。
代码调试中的问题和解决过程
- 问题1:Class与Console类区别?
class调用
console类
问题1解决方案:Class 是java.lang的类,该类的示例可以帮助创建其他的实例。
- 问题2:math类,biginteger类和random类
问题2解决方案:
math类
biginteger类
random类
[代码托管]
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 3500行 | 8篇 | 100小时 | |
第五周 | 350/500 | 2/2 | 15/20 | |
第六周 | 350/500 | 2/2 | 20/30 | |
第七周 | 600/1000 | 2/2 | 25/25 | |
第八周 | 0/1500 | 0/2 | 0/25 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:25小时
实际学习时间:25小时
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)