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方法拼接出来的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容