201711671109《Java程序设计》第九周总结(第8章)

教材内容学习

 

8.1String类

1、构造String对象

(1)常量对象

String常量也是对象,是用双引号(英文输入法的双引号)括起来的字符

(2)String对象

可以使用String类的对象并创建对象

例:String s=new String(“We  are  student”);

注:用户输入无法输出String对象的引用

(3)tring常量

String常量是对象,因此可以把String常量的引用赋值给一个String对象

 

 

2、字符串并置

String对象可以用“+”进行并置运算,即首尾相连得到一个新的string对象

如:   String you=“你”      String hi=“好”      String testOne  => testOne=you+hi

 

3、String类的常用方法

(1)public int length()

String类中的length()方法用来获取一个String对象的字符序列的长度

(2)public boolean equals(String s)

String对象调用equeals(String s)方法比较当前String对象的字符序列是否与参数s指定的String对象的字符序列相同

(3)public boolean startsWith(String s)、public boolean endsWith(String s)方法

String对象调用statsWith(String s)方法,判断当前String对象的字符序列前缀是否是参数指定的String对象s的字符序列,使用endsWith(String s)方法,判断一个String对象的字符序列后缀是否是String对象s的字符序列

(4)public int compareTo(String s)

String对象调用compareTo(String s)方法,按字典序列参与参数指定的String对象s的字符序列比较大小

(5)public boolean contains(String s)

String对象调用contains方法判断当前String对象的字符序列是否包含参数s的字符序列

(6)public int indexOf(String s)和public int lastIndexOf(String s)

String对象调用方法indexOf(String s)从当前String对象的字符序列的0索引位置开始检索首次出现str得到字符序列的位置,如果没有检索到,该方法返回的值是-1。调用方法lastIndexOf(String s)从当前String对象的字符序列的0索引位置开始检索最后一次出现str的字符序列的位置,并返回该位置

(7)public String sulstring(int startpoint)

字符串对象调用该方法获得一个新的String对象,新的String对象的字符序列是复制当前String对的字符序列中的startpoint位置至最后位置上的字符所得到的字符序列

(8)public String trim()

String对象调用方法trim()得到一个新的String对象,这个新的String对象的字符序列是当前String对象的字符序列去掉前后空格后的字符序列

 

4、字符串与基本数据的相互转化

java.lang包中的Integer类调用其类的方法public static int parseInt(String s)

可以将由“数字”字符组成的字符序列,如“876”转化为int型数据

 

8.2StringTokenizer类

StringTokenizer对象分解String对象的字符序列

(1)当分析一个String对象的字符序列并将字符序列分解成可独立使用的单词时,可以用java.util包中的StringTokenizer类,该类要两个构造方法:

①StringTokenizer(String s):为String对象s构造一个分析器。默认使用分隔标记。

②StringTokenizer(String s,String delim):为String对象s构造一个分析器。参数delimma的字符序列中的字符的任意格式被作为分隔标记

(2)一个分析器可以使用nextToken()方法逐个获取String对象的字符序列中的语言符号(单词)

(3)通常用while循环来逐个获取语言符号,为了控制循环,可以使用StringTokenizer类中的haaMoreTokens()方法,只要字符序列中还有语言符号,即计数变量的值大于0,改方法就返回ture,否则返回false

 

8.3Scanner类

(1)Scanner对象

Scanner对象可以解析字符序列中的单词

Scanner对象默认地使用空白符(空格、制表符、回行符)作为分隔标记来解析String对象的字符序列中的单词

(2)StringTokenizer和Scanner的区别

①StringTokenizer类把分解出的全部单词都存放当StringTokenizer对象的实体中,因此StringTokenizer对象能较快的分解出全部单词,即StringTokenizer对象的实体所占的内存较多(用空间换取速度)

②Scanner类不吧单词存放到Scanner对象的实体中,而仅仅存放怎样换取单词的分隔标记,因此Scanner对象获单词的速度相对较慢,但Scanner对象节省空间

 

8.4StringBuffer类

 

1、StringBuffer对象

String对象的字符序列是不可修改的,StringBuffer类的对象的实体的内存空间可以自动地改变大小,便于存放一个可变的字符序列

 

2、StringBuffer类的常用方法

(1)apend

①StringBuffer append(String s):将String对象s的字符序列追加到当前StringBuffer对象的字符序列中,并返回当前StringBuffer对象的引用

②StringBuffer append(int n):将int型数据n转化为String对象,在把该String对象的字符序列追加到当前StringBuffer对象的字符序列中,并返回当前StringBuffer对象的引用

③StringBuffer append(Object o):将一个Object对象o的字符序列表示追加到当前StringBuffer对象的字符序列中,并返回当前StringBuffer对象的引用

(2)public char charAt(int n)和public void setCharAt(int n,char h)

char charAt(int n)得到StringBuffer对象的字符序列位置n上的字符。void setCharAt(int n,char h)将当前StringBuffer对象的字符序列位置n上的字符用参数ch指定的字符替换

(3)StringBuffer insert(int index,String str)

StringBuffer对象使用insert方法将参数str指定的字符序列插入到参数index指定的位置,并返回当前对象引用

(4)public StringBuffer reverse()

StringBuffer对象使用reverse()方法将该对象实体中的字符序列翻转,并返回当前对象的引用

(5)StringBuffer delete(int startIndex,int endIndex)

delete(int startIndex,int endIndex)从当前StringBuffer对象的字符序列中输出一个子字符序列,并返回当前对象的引用

(6)StringBuffer replace(int startIndex,int endIndex,String str)

replace(int startIndex,int endIndex,String str)将当前StringBuffer对象的字符序列的一个子序列用参数str指定的字符序列替换

 

8.5Date类与Calendar类

1、Date类

(1)使用无参数构造方法

如:Date nowTime=new Date();

(2)使用带参数的构造方法

如:Date date1=new Date(1000);

 

2、Calendar类

使用Calendar类的static方法getInstance()可以初始化一个日历对象

calendar对象调用方法public int get(int field)可以获取有关年份、月份、小时、星期等信息,参数field的有效值有Calendar的静态常量指定

calendar对象调用public long getTimeInMillis()可以返回当前calendar对象中时间的毫秒计时

 

8.6日期的格式化

 

(1)格式化模式

format方法中的“格式化模式"是一个用双引号括起的字符序列,该字符序列中的字符由时间格式符和普通字符构成

(2)日期列表

format方法中的“日期列表”可以是用逗号分隔的Calendar对象或Date对象

(3)格式同一日期

希望用几个格式符号格式“日期列表”的同一个日期,可以在“格式化模式”中使用“<"将格式化同一日期

 

8.7Math类、BigInteger类和Random类

1、Math类

在编写程序是,可能需要计算一个数的平方根、绝对值或获取一个随机数等,需要用到java.lang包中的Math类。

注:Math类中还有两个static常量:E和PI

 

2、BigInteger类

可以使用构造方法public BigInteger(String val)构造一个十进制的BigInteger对象,一般用来处理特别大的整数

 

3、Random类

Random:随机数生成器

 

8.8数字格式化

1。format方法

(1)格式化模式

format方法中的“格式化模式"是一个用双引号括起的字符序列,该字符序列中的字符由时间格式符和普通字符构成

(2)值列表

format方法中的“值列表”是用逗号分隔的变量、常量或表达式

(3)格式化顺序

format方法默认按从左到右的顺序使用“格式化模式”中的格式符来格式化“值列表“中对应的值,而“格式化模式”中的普通字符保留原样

 

2、格式化整数

(1)%d、%o、%x和%X

%d:将值格式化为十进制整数

%o:将值格式化为八进制整数

%x:将值格式化为小写的十六进制整数,例如abc58

%X:将值格式化为大写的十六进制整数,例如ABC58

(2)修饰符

加号修饰符“+”:格式化为正整数

逗号修饰符“,”:格式化整数时,按“千“分组

(3)数据的宽度

就是format方法返回的字符窜长度

 

3、格式化浮点数

(1)float、Float、double和Double

%f、%e(%E)、%g(%G)和%a(%A)格式符可格式化float、Float、double和Double

(2)修饰符

加号修饰符“+”:格式化为正整数

逗号修饰符“,”:格式化整数时,按“千“分组

(3)限制小数位数与数据的宽度

“%.nf”可以限制小数的位数,其中n是保留的小数位数

规定宽度的一般格式为:“%mf”,在数字的左面加空格;或“%-md”,在数字的右面加空格

 

8.9Class类与Console类

1、Class类

可以使用Class对象得到某个类的实例

 

2、Console类

可以在键盘上输入一行文本,但不让文本回显

 

8.10Pattern类与Matcher类

Pattern类和Matcher类:专门用来进行模式匹配

(1)建立Pattern对象

Pattern pattern=Pattern.compile(regex);

(2)得到Matcher对象

Matcher matcher=pattern.matcher(input);

 

代码编写

Example8_23.java

public class Example8_23 {
   public static void main(String args[]) {
      RedEnvelope redEnvelope = new RandomRedEnvelope(5.20,6);
      System.out.printf("以下用循环输出%d个人抢%.2f圆的随机红包:\n",
                         redEnvelope.remainPeople,redEnvelope.remainMoney);
      showProcess(redEnvelope);
   }
   public static void showProcess (RedEnvelope redEnvelope) {
      double sum = 0;
      while(redEnvelope.remainPeople>0){
         double money = redEnvelope.giveMoney();
         System.out.printf("%.2f\t",money);
         sum = sum+money;
      }
      String s = String.format("%.2f",sum);   //金额保留2位小数
      sum = Double.parseDouble(s);
      System.out.printf("\n%.2f圆的红包被抢完",sum);
   }
}

 

RedEnvelope.java

public abstract class RedEnvelope {
    public double remainMoney;    //红包当前金额
    public int remainPeople;      //当前参与抢红包的人数   
    public double money ;         //当前用户抢到的金额
    public abstract double giveMoney(); //抽象方法,具体怎么抢红包由子类完成
}

 

 

RandomRedEnvelope.java

import java.util.Random;
public class RandomRedEnvelope extends RedEnvelope { //随机红包
    double minMoney;       //可以抢到的最小金额
    int integerRemainMoney;   //红包中的钱按分表示
    int randomMoney;          //给抢用户的钱
    Random random;
    RandomRedEnvelope(double remainMoney,int remainPeople) {
       random = new Random();
       minMoney = 0.01;  //minMoney的值是0.01,保证用户至少能抢到0.01圆
       this.remainMoney =  remainMoney; 
       this.remainPeople = remainPeople; 
       integerRemainMoney =(int)(remainMoney*100); //把钱按分表示
       if(integerRemainMoney<remainPeople*(int)(minMoney*100)){
          integerRemainMoney = remainPeople*(int)(minMoney*100);
          this.remainMoney =(double)integerRemainMoney;
       }
    }
    public double giveMoney() {
      if(remainPeople<=0) {
         return 0;
      }
      if(remainPeople ==1) {
         money = remainMoney;
         remainPeople--;
         return money;
      }
      randomMoney = random.nextInt(integerRemainMoney);
      //该金额randomMoney在[0,integerRemainMoney) 区间内
      if(randomMoney<(int)(minMoney*100)) {
         randomMoney = (int)(minMoney*100);      //保证用户至少能抢到1分
      }
      int leftOtherPeopleMoney =integerRemainMoney-randomMoney;
      //leftOtherPeopleMoney是当前用户留给其余人的钱(单位是分)
      int otherPeopleNeedMoney = (remainPeople-1)*(int)(minMoney*100); 
      //otherPeopleNeedMoney是保证其他人还能继续抢的最少金额(单位是分)
      if(leftOtherPeopleMoney<otherPeopleNeedMoney) {
        randomMoney -=(otherPeopleNeedMoney-leftOtherPeopleMoney);
      }
      integerRemainMoney = integerRemainMoney - randomMoney;
      remainMoney = (double)(integerRemainMoney/100.0); //钱的单位转成圆
      remainPeople--;
      money = (double)(randomMoney/100.0);
      return money;   //返回用户抢到的钱(单位是圆)
   }
}

 

教材中遇到的问题

 

学习进度条

 代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时 
第二周100/6501/915/71

String类和Scanner类

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值