《JAVA程序设计》_第七周学习总结
一、学习内容
1.String类——8,1知识
- Java专门提供了用来处理字符序列的String类。String类在java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使用String类。
- 需要注意的是Java把String类声明为final类,因此用户不能扩展String类,即String类不可以有子类。
- 构造String对象
- 常量对象:字符串常量对象是用双引号括起的字符序列,例如:"你好"、"12.97"、"boy"等。Java把用户程序中的String常量放入常量池。因为String常量是对象,所以也有自己的引用和实体。
- String对象:可以使用String类声明对象并创建对象,例如:
String s = new String("we are students");
String t = new String("we are students");
- 对象变量s中存放着引用,表明自己的实体的位置,即new 运算符首先分配内存空间并在内存空间中放入字符序列,然后计算出引用。
- 另外,用户无法输出String对象的引用:```Syste.out.println(s);```。输出的是对象的实体,即字符序列```we are students```。
- 也可以用一个已创建的String对象创建另一个String对象,如:
String tom = new String(s);
- String类还有两个较常用的构造方法。
- String (char a[])用一个字符数组a创建一个String对象,如:
char a[] = {'J','a','v','a'};
String s = new String(a);
过程相当于
String s = new String("Java");
- ```String(char a[],int startIndex,int count)```
提取字符数组a中的一部分字符创建一个String对象,参数startIndex和count分别指定在a中提取字符的起始位置和从该位置开始截取的字符个数,如:
char a[] = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
String s = new String(a,2,4);
相当于
String s = new String("贰叁肆伍");
正则表达式
- 正则表达式是一个String对象的字符序列,该字符序列中含有具有特殊意义字符,这些特殊字符称做正则表达式中的元字符。比如,"\dcat"中的\d就是有特殊意义的元字符,代表0到9中的任何一个,"0cat","1cat","2cat",…,"9cat"都是和正则表达式"\dcat"匹配的字符序列。
- 在正则表达式中可以用方括号括起若干个字符来表示一个元字符,该元字符代表方括号中的任何一个字符。例如String regex = "[159]ABC",那么"1ABC"、"5ABC"和"9ABC"都是和正则表达式regex匹配的字符序列。例如,[abc]:代表a、b、c中的任何一个;[^abc]:代表除了a、b、c以外的任何字符;[a-zA-Z]:代表英文字母(包括大写和小写)中的任何一个。
- String对象调用public String replaceAll(String regex,String replacement)方法返回一个新的String对象,这个新的String对象的字符序列是把当前String对象的字符序列中所有和参数regex匹配的子字符序列,用参数replacement的字符序列替换后得到字符序列。
public String[] split(String regex)
使用参数指定的正则表达式regex做为分隔标记分解出其中的单词,并将分解出的单词存放在字符串数组中。例如,对于字符串strString str = "1949年10月1日是中华人民共和国成立的日子";
如果准备分解出全部由数字字符组成的单词,就必须用非数字字符串做为分隔标记,因此,可以使用正则表达式:String regex="\\D+";
做为分隔标记分解出str中的单词:String digitWord[]=str.split(regex);
那么,digitWord[0]、digitWord[1]和digitWord[2]就分别是“1949”、“10”和“1”。
2.StringTokenizer类 ——8.2知识
- StringTokenizer类在java.util包中,有两个常用的构造方法:
- StringTokenizer(String s):为String对象s构造一个分析器。使用默认的分隔标记,即空格符、换行符、回车符、Tab符、进纸符做分隔标记。
- StringTokenizer(String s, String delim为String对象s构造一个分析器。参数delim的字符序列中的字符的任意排列被作为分隔标记。
- StringTokenizer对象称作一个字符串分析器可以使用下列方法:
- nextToken():逐个获取字符串中的语言符号(单词),字符串分析器中的负责计数的变量的值就自动减一 。
- hasMoreTokens():只要字符串中还有语言符号,即计数变量的值大于0,该方法就返回true,否则返回false。
- countTokens():得到分析器中计数变量的值
3.Scanner类——8.3知识
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(正则表达式); 方法将一个正则表达式作为分隔标记,即和正则表达式匹配的字符串都是分隔标记。
4.StringBuffer类——8.4知识
- 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对象的引用
类似的方法还有: - StringBuffer append(long n),StringBuffer append(boolean n),
- StringBuffer append(float n),StringBuffer append(double n),
- StringBuffer append(char n)
- 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对象实体中的字符串中删除一个子字符串
- 其相关方法:deleteCharAt(int index) 删除当前StringBuffer对象实体的字符串中index位置处的一个字符。
- StringBuffer replace(int startIndex,int endIndex,String str):将当前StringBuffer对象实体中的字符串的一个子字符串用参数str指定的字符串替换
5.Date与Calendar类——8.5知识
(1) Date类
- Date类在java.util包中.
- Date类的构造方法之一:
- Date()使用Date类的无参数构造方法创建的对象可以获取本地当前时间。
- Date类的构造方法之二:
- Date(long time)使用long型参数创建指定的时间
- System类的静态方法 public long currentTimeMillis() 获取系统当前时间。
(2)Calendar类
- Calendar类在java.util包中。
- 使用Calendar类的static方法 getInstance()可以初始化一个日历对象,如:
Calendar calendar= Calendar.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.日期的格式化——8.6知识
可以直接使用String类调用format方法对日期进行格式化。
8.6.1 format方法
- Formatter类的format方法:
format(格式化模式, 日期列表)
按着“格式化模式”返回“日期列表”中所列各个日期中所含数据(年,月,日,小时等数据)的字符串表示。
Java已经将format方法做为了String类的静态方法,因此,程序可以直接使用String类调用format方法对日期进行格式化。
- 1.格式化模式
format方法中的“格式化模式”是一个用双引号括起的字符序列(字符串),该字符序列中的字符由时间格式符和普通字符所构成。例如:"日期:%ty-%tm-%td"
String s = String.format("%tY年%tm月%td日",new Date(),new Date(),new Date());
那么s
就是"2011年02月10日"
- 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日"
。
8.6.2 不同区域的星期格式
如果想用特定地区的星期格式来表示日期中的星期,可以用format的重载方法:
format (Locale locale,格式化模式,日期列表);
其中的参数locale
是一个Locale类的实例,用于表示地域。
Locale类的static常量都是Locale对象,其中US是表示美国的static常量。
7.Math类、BigInteger类和Random类——8.7知识
8.7.1 Math类
Math类在java.lang包中。Math类包含许多用来进行科学计算的类方法,这些方法可以直接通过类名调用。
另外,Math类还有两个静态常量,它们分别是:
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 static long round(double a)
返回值是(long)Math.floor(a+5),即所谓a的“四舍五入”后的值。
8.7.2 BigInteger类
java.math包中的BigInteger类提供任意精度的整数运算。可以使用构造方法:
public BigInteger(String val)
构造一个十进制的BigInteger对象。
以下是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进制的字符串表示。
8.7.3 Random类
Random类的如下构造方法:
public Random();
public Random(long seed);
第一个构造方法使用当前及其实践作为种子创建一个Random对象,第二个构造方法使用参数seed
指定的种子创建一个Random对象。
随机数生成器random调用不带参数的nextInt()
方法:
Random random=new Random();
random.nextInt();
返回一个0至n之间(包括0,但不包括n)的随机数
随机数生成器random调用带参数的nextInt(int m)
方法(参数m必须取正整数值)
8.数字格式化——8.8知识
8.8.1 format方法
Formatter类提供了一个和C语言printf函数类似的format方法:format(格式化模式,值列表)
该方法按着“格式化模式”返回“值列表”的字符串表示。
Java已经将format方法做为了String类的静态方法,因此,程序可以直接使用String类调用format方法对数字进行格式化。
- 1.格式化模式:format方法中的“格式化模式”是一个用双引号括起的字符序列(字符串),该字符序列中的字符由格式符和普通字符所构成。
例如:"输出结果%d,%f,%d"
中的%d
和%f
是格式符号。
format方法返回的字符串就是“格式化模式”中的格式符被替换为它得到的格式化结果后的字符串。
例如:String s = String.format(“%.2f”,3.141592);
那么s
就是“3.14”
. - 2.值列表:format方法中的“值列表”是用逗号分隔的变量、常量或表达式。 例如:
String s=format("%d元%0.3f公斤%d台",888,999.777666,123);
那么,s
就是"888元999.778公斤123台"
。 - 3.格式化顺序:format方法默认按从左到右的顺序使用“格式化模式”中的格式符来格式化“值列表”中对应的值,而“格式化模式”中的普通字符保留原样。
例如,假设int型变量x
和double型变量y
的值分别是888
和3.1415926
,
那么对于String s = format("从左向右:%d,%.3f,%d",x,y,100);
字符串s就是:从左向右:888,3.142,100
- 注1:改变默认的顺序(从左向右)进行格式化,在格式符前面添加索引符号
index$
,例如,1$
表示“值列表”中的第1个,2$
表示“值列表”中的第2个,
对于:String s=String.format(“不是从左向右:%2$.3f,%3$d,%1$d”,x,y,100);
字符串s
就是:不是从左向右:3.142,100,888- 注2:如果准备在“格式化模式”中包含普通的
%
,在编写代码时需要连续键入两个%
,如:
String s=String.format("%d%%",89);
输字符串s是:"89%"
8.8.2 格式化整数
- 1.
%d
、%o
、%x
和%X
格式符可格式化byte、Byte、short、Short、int、Integer、long和Long型数据。 - 2.修饰符
- 加号修饰符"+"格式化正整数时,强制添加上正号,例如,%+d将123格式化为"+123"。
- 逗号修饰符“,”格式化整数时,按"千"分组。
- 3.数据的宽度
数据的宽度就是format方法返回的字符串的长度。规定数据宽度的一般格式为“%md”,其效果是在数字的左面增加空格;或"%-md“,其效果是在数字的右面增加空格,
例如,将数字59格式化为宽度为8的字符串:String s=String.format("%8d",59);
字符串s
就是:“ 59"
,其长度(s.length())
为8,即s
在59左面添加了6个空格字符。- 对于:
String s=String.format(“%-8d”,59);
字符串s
就是:"59 "
,其长度(s.length())
为8。 - 对于:
String s=String.format("%5d%5d%8d",59,60,90);
字符串s
就是:“59 60 90”
(长度为18)。
- 对于:
注:如果实际数字的宽度大于格式中指定的宽度,就按数字的实际宽度进行格式化。
可以在宽度的前面增加前缀0,表示用数字0(不用空格)来填充宽度左面的富裕部分,例如:String s=String.format("%08d",12);
字符串s
就是:"00000012"
,其长度(s.length())
为8,即s
在12的左面添加了6个数字0。
8.8.3 格式化浮点数
- 1.
float
,Float
,double
和Double
%f
,%e(%E)
,%g(%G)
和%a(%A)
格式符可格式化float、Float、double和Double:%f
将值格式化为十进制浮点数,小数保留6位。%e(%E)
将值格式化为科学记数法的十进制的浮点数(%E在格式化时将其中的指数符号大写,例如5E10)。
- 2.修饰符
- 加号修饰符"+"格式化正数时,强制添加上正号,例如%+f将123.78格式化为"+123.78", %+E将123.78格式化为"+1.2378E+2"。
- 逗号修饰符“,”格式化浮点数时,将整数部分按“千”分组。
- 3.限制小数位数与数据的“宽度”
"%.nf"
可以限制小数的位数,其中的n是保留的小数位数,例如%.3f
将6.1256
格式化为"6.126"
(保留3位小数)。
规定宽度的一般格式为“%mf”
(在数字的左面增加空格),或“%-md”
(在数字的右面增加空格)。
注:如果实际数字的宽度大于格式中指定的宽度,就按数字的实际宽度进行格式化
9.Class类与Console类——8.9知识
8.9.1 Class类
- 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类必须有无参数的构造方法。
8.9.2 Console类
如果希望在键盘输入一行文本,但不想让该文本回显,即不在命令行显示,那么就需要使用java.io
包中的Console类的对象来完成。
首先使用System类调用console()
方法返回一个Console类的一个对象,比如cons
:
Console cons = System.console();
然后,cons
调用readPassword()
方法读取用户在键盘输入的一行文本,并将文本以一个char
数组返回:
char[] passwd = cons.readPassword();
8.10 Pattern类与Matcher类
Pattern类和Matcher类在java.util.regex包中。
以下结合具体问题来讲解使用Pattern类和Matcher类的步骤。假设有字符串:
String input = "hello,good morning,this is a good idea"
我们想知道input
从哪个位置开始至哪个位置结束曾出现了字符串good
。
使用Pattern类和Matcher类检索字符串str
中的子字符串的步骤如下:
- 1.建立模式对象
使用正则表达式regex
做参数得到一个称为模式的Pattern类的实例pattern
:
例如:
String regex = "good";
Pattern pattern = Pattern.compile(regex);
模式对象是对正则表达式的封装。Pattern类调用类方法compile(String regex)
返回一个模式对象,其中的参数regex是一个正则表达式, 称为模式对象使用的模式。
- 2.得到匹配对象
模式对象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
指定的字符串得到的。
二、脚本截图
三、学习感受
- 本周的学习内容相较于上周较为简单,重点在于正则表达式,理解起来比较费劲,之后也会对这一部分进行巩固的。
- 本周的结对项目进入了完善和整合阶段,进行了整体总结
- 本周的团队项目也对之前的《需求规格说明书》和团队分工进行了完善,确定分工
《JAVA程序设计》_第七周学习总结的更多相关文章
- 20145213《Java程序设计》第七周学习总结
20145213<Java程序设计>第七周学习总结 教材学习内容总结 周末快乐的时间总是短暂的,还没好好感受就到了要写博客的周日.有人喟叹时间都去哪儿了,那本周我们就来认识一下Java里的 ...
- 20145337《JAVA程序设计》第七周学习总结
20145337 <Java程序设计>第七周学习总结 教材学习内容总结 时间的度量 格林威治时间GMT,世界时UT,国际原子时TAI,世界协调时间UTC 就目前来说,即使标注为GMT,实际 ...
- 20145320 《Java程序设计》第七周学习总结
20145320 <Java程序设计>第七周学习总结 教材学习内容总结 13章 时间与日期 时间的度量: 格林威治标准时间(GMT时间),现已不作为标准时间使用. 世界时(UT),秒的单位 ...
- 《Java程序设计》第七周学习总结
20145224 <Java程序设计>第七周学习总结 教材学习内容总结 13.1 认识时间与日期 ·想要度量时间首先要有时间基准,目前国际上通用的有一下六个时间基准: 1.格林威治标准时间 ...
- 201521123061 《Java程序设计》第七周学习总结
201521123061 <Java程序设计>第七周学习总结 1. 本周学习总结 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源代码 贴上源 ...
- 201521123038 《Java程序设计》 第七周学习总结
201521123038 <Java程序设计> 第七周学习总结 1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 ...
- 20145237 《Java程序设计》第七周学习总结
20145237 <Java程序设计>第七周学习总结 教材学习内容总结 第十三章 一.认识时间与日期 1.时间的度量 在正式认识Java提供了哪些时间处理API之前,得先来了解 ...
- 20175209 《Java程序设计》第七周学习总结
20175209 <Java程序设计>第七周学习总结 一.教材知识点总结 第八章 常用类和实用类 1.String类 构造String对象 常量对象:""中的字符序列, ...
- 20175204 张湲祯 2018-2019-2《Java程序设计》第七周学习总结
20175204 张湲祯 2018-2019-2<Java程序设计>第七周学习总结 教材学习内容总结 -第八章常用实用类要点: 一.String类: 1.String类所在的包:java. ...
- 20175305张天钰《java程序设计》第七周学习总结
<java程序设计>第七周学习总结 第八章 常用实用类 1.String类 1.String类不可以有子类. 2.用户无法输出String对象的引用,输出的是字符序列 3.构造方法:Str ...
随机推荐
- python3.6+selenium3.13 自动化测试项目实战一(增加自动发送邮件报告接口)
说明: 继实战项目一的基础上添加自动发送报告邮件接口,代码有部分调整,可以结合实战一和上篇文章学习 变动: 1.增加文本文档SendToUserinfo.txt 用来保存邮件接收者的信息 2.修改测试 ...
- Cocos Creator—优化首页打开速度
Cocos Creator是一个优秀的游戏引擎开发工具,很多地方都针对H5游戏做了专门的优化,这是我比较喜欢Cocos Creator的一点原因. 其中一个优化点是首页的加载速度,开发组为了加快首页的 ...
- Node.js 事件循环机制
Node.js 采用事件驱动和异步 I/O 的方式,实现了一个单线程.高并发的 JavaScript 运行时环境,而单线程就意味着同一时间只能做一件事,那么 Node.js 如何通过单线程来实现高并发 ...
- Java多线程系列(1)
本章主要内容有: 1.线程进程的区别 2.线程的生命周期 3.Java内存模型 原子性,可见性及有序性 4.线程池及Java实现 1. 线程进程的区别 线程:程序运行的最小单位 进程:资源分配的最小单 ...
- 简单读!zookeeper单机模式的启动逻辑
zk用处如此之多,以至于每个地方都要你理解zk原理! 请按如下操作姿势打开: 1. 打开zk的git仓库地址:https://github.com/apache/zookeeper , 确认过眼神,它 ...
- 史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!
想往高处走,怎么能不懂 Dubbo? Dubbo是国内最出名的分布式服务框架,也是 Java 程序员必备的必会的框架之一.Dubbo 更是中高级面试过程中经常会问的技术,无论你是否用过,你都必须熟悉. ...
- 一次 C# 查詢數據庫 算法優化的案例
最近有次在修改某段程式時,發現一段程式算法看起來簡單. 但背後因為多次查詢數據庫,導致效能問題. 這段程式主要是利用 EPPLUS 讀取 Excel 資料,檢查資料是否已存在數據庫中,若有就將已存在的 ...
- Spring MVC深入学习
一.MVC思想 MVC思想简介: MVC并不是java所特有的设计思想,也不是Web应用所特有的思想,它是所有面向对象程序设计语言都应该遵守的规范:MVC思想将一个应用部分分成三个基本部 ...
- 20190329-盒尺寸、boder-
目录 1.盒尺寸四家庭 width:宽度 height:高度 margin:外边距 padding:内边距 盒模型: 2.border边框 border简写:border-position(top | ...
- webstorm 2018.2.3 license server
推荐地址:http://idea.lanyus.com/ 使用前请将“0.0.0.0 account.jetbrains.com”添加到hosts文件中