教材内容学习
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/650 | 1/9 | 15/71 | String类和Scanner类 |