20175308 2018-2019-2 《Java程序设计》第七周学习总结
教材学习内容总结
本周学习第八章:常用实用类
String类:
- String类位于
java.lang
包中,被定义为final
类,不可扩展,不可以有子类。 - 两种新的构造方式:
char a[] = {'J','a','v','a'};
String s = new String(a);
和
String(char a[],int startIndex,int count)
startIndex:起始位置
count:字符个数
(从字符数组中从startIndex起取count个字符构成字符串)
3. 字符的并置运算:通过“+”进行并置运算
参加并置运算的只要有一个为变量,新生成的字符串都会在动态区,相当于new String (....),如果都是常量,正常放入常量池中
4.方法一览:
public int length():获取字符串长度;
public boolean equals(String s):比较字符串内容是否相同(比较内容,无所谓如何生成的字符串);
public boolean startWith(String s)
public boolean endWith(String s):判断字符串是否由参数s开头/结尾;
public int compareTo(String s):按字典序与参数指定的s比较大小(相等返回0,大于s返回整数,小于s返回负数);
public boolean contain(String s):判断字符串中是否包含参数s;
public int indexOf(String s)
public int lastindexOf(String s):返回s在字符串中首次/最后一次出现的位置(位置从0开始算);
public String substring(int startpoint):获得一个新的字符串,从原字符串的startpoint位置直到最后一个字符都复制下来;
public String trim():返回当前String对象去掉前后空格后的字符序列。
5.与字符数组、字节数组:
将字符串中的字符序列放入字符数组的方法:public void getChars(int start,int end,char c[],int offset)
(起始位置,种植位置,字符数组名称,放入字符数组的位置)
将指定的字节数组byte构成String对象的方法:String(byte[],int offset,int length)
6.正则表达式:public boolean matches (String regex)
判断当前String对象的字符是否和正则表达式相匹配。public String replaceAll(String regex,String replacement)
返回一个String对象,将原字符串中所有与正则表达式相匹配的字符序列换成replacement
后得到的字符序列。
StringTokenizer类:
- 两种构造方法:
1.StringTokenizer(String s)
对s进行分解,分隔标记使用默认的空格、换行、回撤、Tab等
2.StringTokenizer(String s,String delim)
以delim为分隔标记(delim中字符的任何序列) -
has MoreTokens()
:如果字符串中还有内容返回true,否则返回false -
countTokens()
:以字符串全长为初值,分析一个后减一
Scanner类:
Scanner类对象也可以解析字符序列中的单词。useDelimiter(正则表达式)
以正则表达式为分隔字符。next()
依次返回被解析字符序列中的单词,如果最后一个单词也被返回,那么hasNext()
将返回false。
与StringTokenizer的区别:都可以用于分解字符序列中的单词,但思路不同,StringTokenizer
将分解出的单词全部存放在对象的实体中,因此获得单词速度较快,但占用空间,Scanner
仅仅存放怎样获得单词的分隔标记,获得单词的速度较慢,但节省空间
StringBuffer类:
与String类不同,StringBuffer类的对象的实体的内存空间可以自动改变大小,便于存放一个可变的序列。
三个构造方法:
StringBuffer():自动分配初始容量容纳16个字符,大于16则重新分配;
StringBuffer(int size):指定分配实体空间的容量为size;
StringBuffer(String s):指定分配空间为s长度再加16
常用方法:
1.append方法:追加;
2.public char charAt(int n):得到StringBuffer字符序列位置n上的字符;
3.public void setCharAt(int n,char ch):将当前对象字符序列位置n上的字符用ch指定的字符替换;
4.StringBuffer insert(int index,String str):使用insert方法将参数str指定的字符序列插入index指定的位置,并返回当前对象的引用;
5.public StringBuffer reverse():将对象实体中的字符序列翻转并返回引用;
6.StringBuffer delete(int startIndex,int endIndex):从startIndex到endIndex-1删除字符并返回引用;
7.StringBuffer replace(int startIndex,int endIndex,String str):替换字符。
Math类:
Math类中存放着许多可以进行科学计算的static
方法,这些方法都可一直接通过类名调用。
方法一览:
1.public static long abs(double a):返回a的绝对值;
2.public static double max(double a,double b):返回a,b的最大值;
3.public static double min(double a,double b):返回a,b的最小值;
4.public static double random():产生一个0~1之间的随机数(不包括0和1);
5.public static double pow(double a,double b):返回a的b次幂;
6.public static double sqrt(double a):返回a的平方根;
7.public static double log(double a):
返回a的对数;
8.public static double sin(double a):返回a的正弦值;
9.public static double asin(double a):返回a的反正弦值;
10.public static double ceil(double a):返回大于a的最小整数(转化成double类型);
11.public static double floor(double a):返回小于a的最大整数(转化成double类型);
12.public static long round(double a):返回四舍五入后的值。
教材学习中的问题和解决过程
本次学习任务为第八章,里面介绍了常用实用类的基本介绍和用法。有不少类都在之前的学习中有所使用,所以说不上多难,但是对这么多类同时进行系统的学习和驳杂概念的记忆着实是一个不小的挑战,只能尽量挑着重点有选择的记忆。但这种填鸭的记忆并不牢靠,还要靠今后的练习一点点的深入理解。
代码调试中的问题和解决
- 问题:在对教材Example8_12的练习中,我得到了以下结果:
,这与程序正确的结果不符。
问题的解决:仔细观察结果,结果中只计错了商品数量,而商品总价值是正确的,问题必定出现在getGoodsAmount()
中。
如图可见,我的StringTokenizer fenxi = new StringTokenizer(shoppingReceipt)
忘记标注分隔符号“#”,即StringTokenizer fenxi = new StringTokenizer(shoppingReceipt,"#")
。代码本意是将除数字以外的字符全都替换成“#”,然后以“#”为分隔符号分析字符串,这样有几个数字作为价格,就有几个商品。缺少了“#”,就只能计算一个商品。
代码托管
感悟
实话说最近感觉到学习越来越吃力,可能是清明假期出游浪费了太多时间,现在很明显的感觉时间不够用,需要记忆学习的内容太多,需要重新找到一个行之有效的方法改变现在这种状况。