StringBuffer类
我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题线程安全的可变字符序列。构造方法
public StringBuffer()
public StringBuffer(String str)
那么String类和StringBuffer类有什么区别呢?
String特点: 值一旦给定,就不能改变。
我们再使用+=每次拼接创建新的对象, 耗时,浪费空间。
StringBuffer特点: 可变带缓冲区的字符串 如果需要大量的字符串拼接,建议使用StringBuffer。
下面介绍一下StringBuffer的方法。
添加功能
public StringBuffer append(String str):拼接字符串
public StringBuffer insert(int offset,String str):向指定的位置插入元素
删除功能
public StringBuffer deleteCharAt(int index):删除相应位置字符
public StringBuffer delete(int start,int end):删除一定范围内字符串
替换功能
public StringBuffer replace(int start,int end,String str)::选定一个范围进行字符串替换
逆序功能
public StringBuffer reverse():反转字符串
String类StringBuffer类StringBuilder区别
StringBuilder类功能和StringBuffer功能完全一致, StringBuffer是线程安全的。
StringBuffer和StringBuilder区别
相同点: 底层实现方式是完全一致, 类的内部有一个char数组,没有并final修饰,之后对象字符串进行增,删操作。
都是对底层数组直接操作。
不同点:StringBuffer是多线程操作安全的,方法都被synchronized关键字修饰。String:是字符常量,适用于少量的字符串操作的情况。
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况。
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况。
Regex正则表达式
正表则表达式,又称规则达式,(Regular Expression,在代码中常简写为regex、regexp或RE),
这是一种模式匹配语言(用一种规则来匹配文本).
详情和使用规范我们可以自行询问度娘,下面我们举一些栗子来说明。
public static void main(String[] args) {
String s = "a223432HF@qq.com.cn";
boolean b = s.matches("\\d{11}");
boolean b = s.matches("\\d{3,6}");
boolean b = s.matches("\\d{3,}");
boolean b = s.matches("\\d*");//匹配0次或多次
boolean b = s.matches("\\d+");//匹配一次或多次
boolean b = s.matches("[1-9]+");//匹配一次或多次
boolean b = s.matches("[3,5,7,8,9]+");//匹配一次或多次
boolean b = s.matches("1[3,5,7,8,9]\\d{9}");
boolean b = s.matches("[1-9]\\d{5,11}");//qq
boolean b = s.matches("[a-z]+");
boolean b = s.matches("[A-z]+");
boolean b = s.matches("\\w+");// [A-z,0-9,_]
//这里简单举了一个邮箱号码的规范检查的栗子
boolean b = s.matches("[A-z]\\w{6,10}@\\w{2,5}\\.(com|com\\.cn)");
我们说明一下前面我们调用split方法看到括号内的形参给的就是regex,这里指的就是正则表达式。上图代码中的maches方法是用来检索字符串中是否符合规矩。
Math类
Java中的lang包中给我们提供了一个Math类有一系列静态方法用于科学计算;其方法的参数和返回值类型一般为double型。
abs 绝对值
sqrt 平方根
pow(double a, double b) a的b次幂
max(double a, double b)
min(double a, double b)
random() 返回 0.0 到 1.0 的随机数
long round(double a) double型的数据a转换为long型(四舍五入)
Random类
此类方法正如其名,是输出一些各种类型的随机数。
System.out.println(random.nextInt(3));//0-3 0(包含的)-指定值(不包含的)
byte[] bytes = new byte[5];//[0,0,0,0,0]
random.nextBytes(bytes);//随机生成指定数组长度个的byte类型的随机数
System.out.println(Arrays.toString(bytes));
比如第一行的random。nextInt(3),括号内的3是给定随机数划了一个范围,输出0或1或者2。
Date类/Calendar类/ SimpleDateFormat类
Date类和Calendar类,里面是进行一些日期时间的输出方法。
这里我们讲一下date.getMonth()输出月份方法中输出的是0-11。0指的就是12月。同样date.getDay()输出星期方法时输出的是0-6。0指的就是星期天。这与我们中国的日历说法不相同
以上是Date类的使用实例。
下面是Calendar类的使用实例。
这里我们可以看到Calendar类没有自己构造方法,这是因为它是一个抽象类,不能拥有实例对象。在就是Calendar类中的方法都是使用get方法调用的数值。其他跟Date类相差无几。
再就是SimpleDateFormat类
我们上面可以看到输出的日历并不是我们想要的格式,这个类的出现为了将输出格式化成我们想要的相应格式。
在SimpleDateFormat类的构造方法中就可以以正则表达式的形式去更改我们自己想要的格式。
图中的format方法可以将Date类转换为String类。
以下是输出截图
parse方法可以将String类转换为Date类。
BigInteger类和BigDecimal类
这两个类其实很简单,前者是输出大整数,后者是大精度数。
BigInteger integer1 = new BigInteger("922337203685477580792233720368547758079223372036854775807922337203685477580792233720368547758079223372036854775807922337203685477580792233720368547758079223372036854775807");
可以看到可以装下无限制大的整数。
而BigDecimal类
我们举个实例
这里我们可以看到输出11.1-10.9的值是一接近0.2的近似值。
这是因为在计算机中不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去
一定的精确度。十进制值通常没有完全相同的二进制表示形式;十进制数的二进制表示形式可
能不精确。只能无限接近于那个值。
基本运算方法
add()加,subtract()减,multiply()乘,divide()除。
致辞我们的API学习就告一段落了。本章知识虽然比较简单,但是涉及的内容比较多,同学们还是要多做练习,熟练API中的类的用法。