《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做为分隔标记分解出其中的单词,并将分解出的单词存放在字符串数组中。例如,对于字符串str String 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.7182828284590452354PI 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的值分别是8883.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,doubleDouble
    %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是保留的小数位数,例如%.3f6.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():寻找inputregex匹配的下一子序列,如果成功该方法返回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指定的字符串得到的。

二、脚本截图

1591805-20190410091404665-487194992.png

三、学习感受

  • 本周的学习内容相较于上周较为简单,重点在于正则表达式,理解起来比较费劲,之后也会对这一部分进行巩固的。
  • 本周的结对项目进入了完善和整合阶段,进行了整体总结
  • 本周的团队项目也对之前的《需求规格说明书》和团队分工进行了完善,确定分工

转载于:https://www.cnblogs.com/wyf20175217/p/10681235.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值