java常用类---StringBuffer、StringBulider、Math等

一、重点知识

new string(byte[],offset,length)
offset表示的是偏移量,length表示的是截取长度

正则表达式,有自己的规则,需要去记

一维数组里面存的是数据
二维数组里面存的是一维数组得地址,没有给内层数组分配空间就调用内层数组操作,会空指针异常

Charsequence是一个接口表示字符序列

只有调用一个方法,返回类型是一个对象才能用方法链

Stringbuffer调用append方法连接一个对象,实际上链接的是对象调用tostring结果

StringBuffer里的insert也可以实现append的功能
insert(offset,data),插入数据是从offset下标那个位置插入,不是它之前,也不是它之后,就是正好那个位置,如果当前位置有元素,则当前元素后移,所以想实现末尾插入,不用length-1直接length就好了,因为stringbuffer底层存储得数组是可变长度的,不用考虑数组角标越界

StringBuffer里的setlength(data)设置字符串的长度,如果原字符串够长的话起到的是截取的作用,如果不够的话,会补充空字符到你设置的长度

一般工具类中的方法都是静态的

Math.ceil方法向上取整,不论后面小数部分为多大,都向上进一位,Math.floor为向下取整,规则和ceil一样,但是是向下减一位round不一样,他是四舍五入

double--->int  强转为int时是把小数后面的都抛弃了,只保留整数

IEE754是一种计算标准,但是用于计算浮点数不准确,所以引入了Bigdecimal这个类,且这个类重写了tostring

Bigdecimal构造方法一般用字符串,就可以限制他的精度和你输入字符串一致了

Random里面的方法用参数时
nextInt(n)------>[0,n),也遵循左包右不包

日期里模板如果加毫秒一般用.SSS

二、重点问题

1、随机数的问题

随机数有两种方式获取,一种是Math.random,一种是创建Random的对象,调用对应的方法

[10,99]随机数 公式:
(int)(Math.random() * (99 - 10 + 1) + 10)

取[m,n]之间的随机整数
(int)(Math.random() * (n - m + 1) + m)

Math里面的random里面的底层就是new了个Random得对象调用了Random类中的方法

它们两者的区别就是Math里面调用随机数方法是静态的,可以直接调用,但是Random用的话要创建它的对象,Random创建其对象时用的种子数一样,后面计算的结果也都一样

关于Random类中的种子的说明
https://www.cnblogs.com/huiAlex/p/8057737.html

2、关于Scanner进行读入的过程

使用scanner流进行读入的时候他的过程是,把键盘读入的数据放在缓冲区,然后把这个值赋给变量,如果用nextint();出现异常后,键盘读入的数值就会一直在缓冲区,而不会被刷新,所以赋值一直不成功,想解决这个问题,可以把nextint()改成next();,这样就不会再接收得时候报异常,数据能正常存入内存,在转换时候报异常,但是此时缓冲区已经被刷新了,所以可以重新读入了,而不会出现都不进来得情况

正确写法:
while (true) {
try {
    scanner_a = Integer.parseInt(a.next());
    break;
} catch (Exception e) {
    System.out.println("数据有误请重新输入");
}

三、课堂知识

3.1、StringBuffer类

自带了一块缓冲区的字符串,叫StringBuffer类。可以修改字符串的内容。和String完全不同。

理解为:带了一块空间的字符串对象。

3.1.1 构建一个StringBuffer对象

//构造方法:

newStringBuffer();//默认的缓冲区大小16个字符

newStringBuffer(intcapacity);//也可以自己指定容量大小

newStringBuffer(Strings);//StringBuffer对象创建好,并且里面还存储了字符串

3.1.2 StringBuffer的常用方法

//1.添加

append(data)-->StringBuffer,末尾追加。生活中的排队,都是默认排在队伍末尾

insert(offset,data)-->StringBuffer,插入数据。生活中的插队,在哪插入。

//2.删除

delete(start,end)-->StringBuffer,删除,从start下标开始,删除到end下标之前。包含start,但是不包含end。       一般这种范围都是左开右闭。

deleteCharAt(index)-->StringBuffer,删除指定下标对应的字符。

//3.更改

reverse()-->StringBuffer,翻转一个字符串。

setCharAt(index,char)-->void,设置指定下标对应的字符。字符替换。

setLength(newLength)-->void,设置StringBuffer的字符串的长度。截取/用空字符填充

replace(start,end,str)-->StringBuffer,替换指定区间的内容:[start,end)

toString()-->从StringBuffer类型,变为String类型。


//4.同String类相同

length()-->int,获取长度

charAt(index)-->char,

indexOf(String)

indexOf(String,fromIndex)

lastIndexOf(String)

lastIndexOf(String,fromIndex)

substring(begin)

substring(begin,end)

3.2、StringBuilder类

StringBuilder类提供的方法,和StringBuffer功能相同。

StringBuffer和StringBuilder的使用方式几乎相同:

step1:创建StringBuffer或StringBuilder对象。

step2:执行方法:同StringBuffer

它们的区别:

StringBuffer是线程安全的,效率比StringBuilder低一些。JDK1.0就有了

StringBuilder线程不安全。效率比StringBuffer高一些。JDK1.5发布的

3.3、Math类

Math.abs(100);//绝对值

Math.ceil(3.00001) //向上取整

Math.floor(4.1)//向下取整

Math.round(3.49)//四舍五入

Math.pow(a, b)//a的b次方

Math.sqrt()//开平方根

Math.random()//随机数,取值范围:[0,1),随机小数-----就是new Random对象,调用nextDouble()方法。

3.4、BigDecimal类

BigDecimal,构造BigDecimal对象时候,如果直接使用double类型作为参数,存在精度

BigDecimal bd3 = new BigDecimal("0.05");//直接用字符串的形式存储

BigDecimal res1 = bd3.add(bd4);////加法

BigDecimal res2 = bd3.subtract(bd4)//减法

BigDecimal res3 = bd3.multiply(bd4)//乘法

//除不尽的情况,必须明确2个信息:(小数点后保留几位,是否使用四舍五入)

BigDecimal res4 = bd5.divide(bd6);

BigDecimal res5 = bd5.divide(bd6, 2, BigDecimal.ROUND_HALF_UP);
2代表了保留几位,BigDecimal.ROUND_HALF_UP代表了进位规则

3.5、Random类

//step1:创建Random类的对象

Random r1 = new Random();

//step2:通过r1调用方法,就能够生成各种各样的随机数

boolean b1 = r1.nextBoolean();//产生一个boolean类型的随机数

System.out.println(b1);

double d1 = r1.nextDouble();//产生一个随机double类型,取值范围:[0,1)

System.out.println(d1);

int i1 = r1.nextInt();//产生一个int类型的随机数

System.out.println(i1);

int i2 = r1.nextInt(3);//产生一个int类型的随机数:[0,3)

System.out.println(i2);


3.6、日期操作

Date,结合SimpleDateFormat类。

Calendar类。

3.6.1 Date类

java.util.Date类:(区别于java.sql.Date)

表示特定时间的Date对象:年月日时分秒时区

Date类中的很多获取日期,时间等等的方法, 都被Calendar类所提供替代。

3.6.2 SimpleDateFormat类

专门用于日期和文本之间的转换。

        * SimpleDateFormat类:

        * Date-->String:日期格式化,就是将一个日期Date对象,按照指定的字符串格式去显示。

        *    format(),根据模板,将date日期,转为String字符串类型

        *    1.创建SimpleDateFormat对象。可以通过构造方法指定模板(格式):"yyyy-MM-dd"

        *        如果没有指定模板,使用系统默认:20-4-16 上午11:09

        *    2.sdf.format(date)-->String

        * String-->Date:解析?就是将一个文本字符串,解析成一个Date对象。

        *    parse(),根据模板,将字符串解析为对应的日期对象,异常。

        *    2.sdf.parse(String)-->date

        */

3.6.3 Calendar类

Calendar类是抽象的。GregorianCalendar子类。

获取日期时间,也可以设置日期时间。

//step1:创建Calendar类的对象。

Calendarcalendar=newGregorianCalendar();//方式一

CalendarrightNow=Calendar.getInstance();//方式二

//step2:

//获取类

calender.get(YEAR,MONTH,DAY_OF_MONTH,DAY_OF_WEEK,HOUE,MINUTE....);

//设置

calendar.set();

calendar显示是用get方法拼接出来的

你可能感兴趣的:(java常用类---StringBuffer、StringBulider、Math等)