20175319 2018-2019-2 《Java程序设计》第7周学习总结
教材学习内容总结
本周学习《Java程序设计》第8章:
1.String
类:
- Java专门提供了用来处理字符序列的
String
类 - 构造
String
对象- 常量对象
- 字符串常量对象是用双引号括起的字符序列
- 常量池
-
String
对象- 可以使用
String
类声明对象并创建对象 - 用户无法输出
String
对象的引用 - 两个较常用的构造方法
1.String (char a[])
用一个字符数组a创建一个String
对象
2.String(char a[],int startIndex,int count)
提取字符数组a中的一部分字符创建一个String
对象,参数startIndex
和count
分别指定在a中提取字符的起始位置和从该位置开始截取的字符个数。
- 可以使用
- 常量对象
- 字符串的并置
-
String
对象可以用+进行并置运算,即首尾相接得到一个新的String
对象 - 如果是两个常量进行并置运算,那么得到的仍然是常量,如果常量池没有这个常量就放入常量池。
- 参与并置运算的
String
对象,只要有一个是变量,那么Java就会在动态区存放所得到的新String
对象的实体和引用。
-
-
String
类的常用方法-
public int length()
获取一个字符串的长度 -
public boolean equals(String s)
判断当前String
对象的字符序列是否与参数s指定的String
对象的字符序列相同 -
public boolean startsWith(String s)
判断当前String
对象的字符序列前缀是否是参数指定的String
对象s的字符序列 -
public boolean endsWith(String s)
判断当前String
对象的字符序列后缀是否是参数指定的String
对象s的字符序列 -
public int compareTo(String s)
按字典序与参数s指定的字符序列比较大小 -
public boolean contains(String s)``String
对象调用contains
方法判断当前String
对象的字符序列是否包含参数s的字符序列 -
public int indexOf (String str)``String
对象调用方法从当前String
对象的字符序列的0索引位置开始检索首次出现str的字符序列的位置,并返回该位置。如果没有检索到,该方法返回的值是–1 -
public int lastIndexOf(String ste)
从当前String
对象的字符序列的0索引位置开始检索最后一次出现str的字符序列的位置,并返回该位置。如果没有检索到,该方法返回的值是-1 -
public String substring(int startpoint)
字符串对象调用该方法获得一个新的String
对象,新的String
对象的字符序列是复制当前String
对象的字符序列中的startpoint
位置至最后位置上的字符所得到的字符序列。String
对象调用substring(int start ,int end)
方法获得一个新的String
对象,新的String
对象的字符序列是复制当前String
对象的字符序列中的start
位置至end–1
位置上的字符所得到的字符序列
-public String trim()
得到一个新的String
对象,这个新的String
对象的字符序列是当前String
对象的字符序列去掉前后空格后的字符序列
-
- 字符串与基本数据的相互转化
- Java.lang包中的Integer类调用其类方法:
public static int parseInt(String s)
可以将由“数字”字符组成的字符串,转化为int型数据 - 使用java.lang包中的Byte、Short、Long、Float、Double类调相应的类方法可以将由"数字"字符组成的字符串,转化为相应的基本数据类型
-
public static String valueOf(n的类型, n)
可以使用String
类的类方法将数值转化为String
对象
- Java.lang包中的Integer类调用其类方法:
- 对象的字符串表示
- 一个对象通过调用
public String toString()
方法可以获得该对象的字符序列表示。一个对象调用toString()
方法返回的String
对象的字符序列的一般形式为:创建对象的类的名字@对象的引用的字符串表示字符串与字符、字节数组
- 一个对象通过调用
- 字符串与字符数组、字节数组
- 字符串与字符数组
-
String(char[ ])
用指定的字节数组构造一个字符串对象 -
String(char[ ],int offset,int length)
用指定的字节数组的一部分,即从数组起始位置offset
开始取length个字节构造一个字符串对象 -
public char[] toCharArray()
将String
对象的全部字符序列存放到数组中 -
public void getChars(int start,int end,char c[],int offset )
将String
对象的部分字符序列存放到数组中
-
- 字符串与字节数组
-
String(byte[])
用指定的字节数组构造一个字符串对象 -
String(byte[],int offset,int length)
用指定的字节数组的一部分,即从数组起始位置offset
开始取length个字节构造一个字符串对象 -
public byte[] getBytes()
使用平台默认的字符编码,将当前String
对象的字符序列存放到字节数组,并返回数组的引用 -
public byte[] getBytes(String charsetName)
使用参数指定字符编码,将当前String
对象的字符序列存放到字节数组,并返回数组的引用
-
- 字符串的加密算法
char [] p = password.toCharArray();
- 字符串与字符数组
- 正则表达式及字符串的替换与分解
- 正则表达式
- 正则表达式是一个
String
对象的字符序列,该字符序列中含有具有特殊意义字符,这些特殊字符称做正则表达式中的元字符 -
String
对象调用public boolean matches(String regex)
方法可以判断当前String
对象的字符序列是否和参数regex
指定的正则表达式匹配
- 正则表达式是一个
- 字符串的替换
-
public String repalceAll(String regex,String replacement)
用参数replacement
的字符序列替换当前String
的字符序列中所有和参数regex
匹配的子字符序列
-
- 字符序列的分解
-
public String[] split(Sring regex)
使用参数指定的正则表达式regex
作为分割标记分解出当前String
对象的字符序列中的单词,并将分解出的单词存放在String
数组中
-
- 正则表达式
2.StringTokenizer
类
- 两个常用的构造方法:
-
StringTokenizer(String s)
为String
对象s构造一个分析器。使用默认的分隔标记,即空格符、换行符、回车符、Tab符、进纸符做分隔标记 -
StringTokenizer(String s, String delim)
为String
对象s构造一个分析器。参数delim
的字符序列中的字符的任意排列被作为分隔标记
-
-
StringTokenizer
对象称作一个字符串分析器可以使用下列方法:-
nextToken()
逐个获取字符串中的语言符号(单词),字符串分析器中的负责计数的变量的值就自动减一 。 -
hasMoreTokens()
只要字符串中还有语言符号,即计数变量的值大于0,该方法就返回true,否则返回false。 -
countTokens()
得到分析器中计数变量的值
-
3.Scanner
类
-
Scanner
对象可以解析字符序列中的单词 -
Scanner
将空格做为分隔标记来解析字符序列中的单词,具体解析操作:-
Sanner
对象调用next()
方法依次返回被解析的字符序列中的单词,如果最后一个单词已被next()
方法返回,Scanner
对象调用hasNext()
将返回false,否则返回ture - 对于被解析的字符序列中的数字型单词,
Scanner
对象可以用nextInt()
或nextDouble()
方法来代替next()
方法 - 如果单词不是数字型单词,
Scanner
对象调用nextInt()
或nextDouble()
方法将数字型单词转化为int
或double
数据返回 - 如果单词不是数字型单词,
Scanner
对象调用nextInt()
或nextDOuble()
方法将发生InputMismatchException
异常,在处理异常时可以调用next()
方法返回非数字化单词
-
4.StringBuffer
类
-
StringBuffer
对象-
StringBuffer
类的对象的实体的内存空间可以自动地改变大小,便于存放一个可变的字符序列 - 三个构造方法
StringBuffer()
StringBuffer(int size)
StringBuffer(String s)
-
-
StringBuffer
类的常用方法-
StringBuffer append(String s)
将String对象s的字符序列追加到当前StringBuffer
对象的字符序列中,并返回当前StringBuffer
对象的引用 -
StringBuffer append(int n)
将int
型数据n转化为String
对象,再把该String
对象的字符序列追加到当前StringBuffer
对象的字符序列中,并返回当前StringBuffer
对象的引用 -
StringBuffer append(Object o)
将一个Object
对象o的字符序列表示追加到当前String- Buffer
对象的字符序列中,并返回当前StringBuffer
对象的引用 -
public chat charAt(int n )
得到参数n指定的置上的单个字符 -
public void setCharAt(int n ,char ch)
将当前StringBuffer
对象实体中的字符串位置n处的字符用参数ch
指定的字符替换 -
StringBuffer insert(int index, String str)
将参数str
指定的字符串插入到参数index
指定的位置 -
public StringBuffer reverse()
将该对象实体中的字符翻转 -
StringBuffer delete(int startIndex, int endIndex)
从当前StringBuffer
对象实体中的字符串中删除一个子字符串 -
StringBuffer replace(int startIndex,int endIndex,String str)
将当前StringBuffer
对象实体中的字符串的一个子字符串用参数str
指定的字符串替换
-
5.Date
与Calendar
类
-
Date类 - 构造方法 - 使用
Date类的无参数构造方法创建的对象可以获取本地的当前日期和时间,例如
Date nowTime=new Date();- 计算机系统将其自身的时间的“公元”设置在
1970年1月1日0时(格林威治时间),可以根据这个时间使用
Date的带参数的构造方法
Date(long time)来创建一个
Date`对象 -
Calendar
类- 使用
Calendar
类的static
方法getInstance()
可以初始化一个日历对象。
- 使用
-
calendar
对象可以调用方法:public final void set(int year,int month,int date)
public final void set(int year,int month,int date,int hour,int minute)
public final void set(int year,int month, int date, int hour, int minute,int second)
- 将日历翻到任何一个时间
6.日期的格式化
-
format
方法 - 不同区域的星期格式
7.Math
、BigInteger
和Random
类
-
Math
类-
Math
类包含许多用来进行科学计算的static
方法 -
Math
类有两个static
常量:E 2.7182828284590452354
和PI 3.14159265358979323846
-
Math
类的常用方法-
public static long abs(double a)
返回a的绝对值。 -
public static double max(double a,double b)
返回a、b的最大值。 -
public static double min(double a,double b)
返回a、b的最小值。 -
public static double random()
产生一个0到1之间的随机数(不包括0和1)。 -
public static double pow(double a,double b)
返回a的b次幂。 -
public static double sqrt(double a)
返回a的平方根。 -
public static double log(double a)
返回a的对数。 -
public static double sin(double a)
返回正弦值。 -
public static double asin(double a)
返回反正弦值。 -
public static double ceil(double a)
返回大于a的最小整数,并将该整数转化为double
型数据。 -
public static double floor(double a)
返回小于a的最大整数,并将该整数转化为double
型数据。 -
public long double round(double a)
返回a的“四舍五入”后的值。
-
-
-
BigInteger
类-
java.math
包中的BigInteger
类提供任意精度的整数运算。可以使用构造方法:public BigInteger(String val)
构造一个十进制的BigInteger
对象 -
public BigInteger add(BigInteger val)
返回当前大整数对象与参数指定的大整数对象的和。 -
public BigInteger subtract(BigInteger val)
返回当前大整数对象与参数指定的大整数对象的差。 -
public BigInteger multiply(BigInteger val)
返回当前大整数对象与参数指定的大整数对象的积。 -
public BigInteger divide(BigInteger val)
返回当前大整数对象与参数指定的大整数对象的商。 -
public BigInteger remainder(BigInteger val)
返回当前大整数对象与参数指定的大整数对象的余。 -
public int compareTo(BigInteger val)
返回当前大整数对象与参数指定的大整数的比较结果,返回值是1、-1或0,分别表示当前大整数对象大于、小于或等于参数指定的大整数。 -
public BigInteger pow(int a)
返回当前大整数对象的a次幂。 -
public String toString()
返回当前大整数对象十进制的字符串表示。 -
public String toString(int p)
返回当前大整数对象p进制的字符串表示。
-
-
Random
类- 构造方法:
-
public Random();
使用当前机器时间作为种子创建一个Randow
对象 -
public Random(long seed);
使用参数seed
指定的种子创建一个Random
对象
-
- 构造方法:
8.数字格式化
-
format
方法 - 格式化整数
- 格式化浮点数
9.Class
类与Console
类
-
Class
类- 使用
Class
的类方法得到一个和某类(参数className
指定的类)相关的Class
对象:public static Class forName(String className) throws ClassNotFoundException
方法返回一个和参数className
指定的类相关的Class对象。如果类在某个包中,className
必须带有包名 - 上述步骤中获得的
Class对象
调用public Object newInstance() throws Exception
方法就可以得到一个className类的对象 - 要特别注意的是:使用
Class
对象调用newInstance()
实例化一个className
类的对象时,className
类必须有无参数的构造方法
- 使用
-
Console
类Console cons=System.console() char[] passwd=cons.readPassword()
10.Pattern
与Matcher
类
- Java提供了专门用来进行模式匹配的
Pattern
类和Matcher
类,这些类在java.util.regex
包中 - 建立
Pattern
对象- 使用正则表达式
regex
作参数得到一个称为模式的Pattern
类的实例pattern
-
Pattern
对象是对正则表达式的封装。Pattern
类调用类方法compile(String regex
)返回一个Pattern
对象,其中的参数regex
是一个正则表达式,称为模式对象使用的模式
- 使用正则表达式
- 得到
Matcher
对象- 模式对象
pattern
调用matcher(CharSequence input)
方法返回一个Matcher
对象matcher
,称为匹配对象,参数input
用于给出matcher
要检索的String
对象
- 模式对象
代码调试中的问题和解决过程
- 问题1:运行第8章例题7时,出现
- 问题1解决方案: GBK中汉字字节长度为2,UTF-8中汉字的字节长度为3,修改代码后即可正常运行。
代码托管
xxx
xxx
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 156/156 | 1/1 | 20/20 | |
第二周 | 275/431 | 1/2 | 22/42 | |
第三周 | 761/1192 | 1/3 | 31/73 | |
第四周 | 428/1620 | 1/4 | 26/99 | |
第五周 | 264/1884 | 1/5 | 11/110 | |
第六周 | 1265/3149 | 4/9 | 32/142 | |
第七周 | 551/3700 | 2/11 | 25/167 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:40小时
实际学习时间:32小时
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)