Java常用类学习(String、StringBuilder、StringBuffer、Math、Date、UUID)

1.1 StringBufferStringBuilder

1.1.1 可变字符串概述

String类型提供了对字符串的只读操作,也即调用字符串的部分方法都会返回一个新的字符串。

如果需要对包装的字符数组进行增、删、改、查时,就需要可变字符串。

java中提供了两类可变字符串的类型StringBufferStringBuilder,位于java.lang包中

1.1.2 StringBuffer

StringBuffer封装了一个字符数组,并提供了对该字符数组进行增、删、改、查的方法。所以,我们完全可以把StringBuffer看成一个"字符的容器"!

可变字符串内存图

StringBuffer构造方法

StringBuffer() : 初始化默认容量是16的可变字符串 StringBuffer(int capacity) 初始化容量是capacity的可变字符串

StringBuffer常用方法

append / insert / delete

setCharAt / replace

public static void main(String[] args) {

//创建一个可变字符串容器,默认容量是16个字符

StringBuffer sb = new StringBuffer();

//创建一个可变字符串容器,容量是100个字符

//StringBuffer sb2 = new StringBuffer(100);

//【1】追加

sb.append('A');

sb.append('B');

//链式操作

sb.append("C").append("D");

System.out.println(sb.toString());

//【2】添加 insert sb.insert(0, 'E');

sb.insert(0, "hello").insert(0, "world"); System.out.println(sb);

//返回容器的容量

System.out.println(sb.capacity());

//返回容器中字符的个数

System.out.println(sb.length());

//当空间不足时,能否继续添加?=> 自动拓容 sb.append(123); System.out.println(sb.length()); System.out.println(sb.capacity());

//【3】删除

//删除指定位置index的字符

sb.deleteCharAt(10);

//删除指定范围的字符 delete(start,end) 含头不含尾 sb.delete(0, 10); System.out.println(sb);


//【4】修改

sb.replace(0, 5, "eabcd");

System.out.println(sb);

sb.setCharAt(0, 'f');

System.out.println(sb);

}

1.1.4 StringBuilder

StringBuffer在源代码级别上已经做到了线程安全,所以StringBuffer非常适合多线程环境。

如果在单线程条件下使用可变字符串序列时,一定优先考虑StringBuilder

面试题: StringBufferStringBuilder的区别

相同点:都是字符串可变缓冲区,api提供了相同的增删改查和自动拓容操作。

不同点:

StringBuffer 线程安全,效率低;StringBuilder线程不安全,效率高。

StringBuffer jdk1.0; StringBuilder jdk1.5

1.2. Math

Math 类包含用于执行简单的数学运算的方法,如随机数、最大值最小值、指数等,该类的方法都是static修饰的,在开发中其实运用并不是很多,里面有一个求随机数的方法,偶尔会用到。

Math类位于java.lang包中。

1.3. Random

Random类用于生产一个伪随机数(通过相同的种子,产生的随机数是相同的),Math类的random方法底层使用的就是Random类的方式。

Random位于java.util包中。

常用方法

nextInt(int n) : 产生范围在[0,n)的随机数

需求:随机产生4位的小写英文字母的验证码

1.4. UUID (掌握)

UUID表示通用唯一标识符 (Universally Unique Identifier) ,其算法通过电脑的网卡、当地时间、随机数等组合而成,优点是真实的唯一性,缺点是字符串太长了。

UUID位于java.util包中,jdk1.5 才出现的类

常用方法

randomUUID() : 产生一个随机的唯一标识符,格式:678f9568-8967-4637-a48e-f0eae30faf43

提示:

java中不通过new构建一个对象的静态方法就称为静态工厂方法,类似地,Integer.valueOf()

1.5. 日期时间

1.5.1 日期时间概述

问题1:计算机如何表示时间?

因为日期时间是变化的,计算机不直接存储具体时间。

时间戳(time stamp:具体时间(特定的瞬间)距离历元(19700101 00:00:00:000) 经过的毫秒数,用long类型存储。

计算机很容易存储long类型数据,所以计算机通过时间戳存储并表示日期时间。

问题2:为什么时间戳一样,时间却不同?

中国时间和国外时间的时间戳都一样,但时区不同。时区导致时间不同。

计算机以格林尼治所在地的标准时间作为时间统一协调时,这个时间在民间称为格林尼治时间(GMT),为了统一国际用法,也称世界协调时(UTC)

问题3:如何计算当地时间?

 当地时间 = UTC + 时区偏移

 中国位于东八区,时区偏移为(+8:00)

中国时间 = UTC + 8:00

日本时间 = UTC + 9:00

1.5.2 Date

Date 位于java.util包中,表示特定的瞬间,内部包装了一个long类型的fastTime,通过运算可以把fastTime转换成年月日时分秒。

常用方法

Date()

getTime()

15.2.1 SimpleDateFormat

打印Date对象时,默认打印的是欧美人的日期时间风格,如果需要输出自定义的时间格式,比如20201212 12:12:12格式或者2020-12-12 12:12:12,此时可以使用SimpleDateFormat类。

SimpleDateFormat类,顾名思义是日期的格式化类,主要包括两个功能的方法:

格式化(format):Date类型转换为String类型:String format(Date date)

解析(parse):String类型转换为Date类型:Date parse(String source)

无论是格式化还是解析都需要设置日期时间的模式,所谓模式就是一种格式。

日期模式举例:

yyyy-MM-dd

2020-12-12

HH:mm:ss

201212

yyyy-MM-dd HH:mm:ss

2020-12-12

201212

yyyy/MM/dd HH:mm:ss

2020/12/12

201212

yyyyMMdd HHmmss

20201212 201212

格式化和解析代码如下

1.6.Calendar

Calendar 日历类,其内部封装了一个long time 表示时间戳,其内部提供了方法通过对time计算出年月日时分秒...等日历字段,这些字段都被存储到一个数组中,通过get(字段)可以去数组中提取对于字段的值。

Calendar还提供了用来对日期做相加减,重新设置日期时间功能

Calendar本身是一个抽象类,通过getInstance方法获取对象,其底层创建的是Calendar的子类对

1.7. 正则表达式

正则表达式,简写为regexRE/Re

正则表达式用来判断某一个字符串是不是符合某一种规则,在开发中通常用于判断检测操作、替换操作、分割操作等。

19.1. 正则表达式规则

正则表达式匹配规则一:元字符 ( 正则表达式中已定义好的字符,这些字符有特定的含义 )

正则表达式匹配规则二:量词

  • 39
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值