常用类:
当我们说到常用类就肯定首先会想到一个父类Object类,它是所有类的顶层父类,一个类都是直接或间接的继承于它。
StringBuffer的应用:
我们可以都知道,当我们对字符串进行拼接时,每次拼接都会构建一个新的String对象,这样既浪费时间,又浪费内存,但是StringBuffer是一个线程安全的可变字符序列。也就是说,可以在同一个内存空间进行拼接,不用去创建多个对象。
它的构造方法包括:
A:的构造方法。
Public StringBuffer()无参构造方法
Public StringBuffer(int capacity)指定容量的字符串缓冲区对象
Public StringBuffer(String str);指定字符串内容的字符串缓冲区对象
具体的使用如下,解释请看注释
public class Test {
public static void main(String[] args) {
String string="aaabbb";
String string2="aaabbb";
//指向同一个常量池空间
System.out.println(string==string2);//true
StringBuffer stringBuffer=new StringBuffer();
//构建一个容量为16个字符的不带字符的字符缓冲区
System.out.println(stringBuffer.capacity());//16
//构建一个初始化序列,并将其初始化为指定的字符串内容
StringBuffer stringBuffer2=new StringBuffer("aaabbb");
System.out.println(stringBuffer2.capacity());//16+6=22
//首先定义具体长度的字符序列,当长度不够存储时会自动增加长度
StringBuffer stringBuffer3=new StringBuffer(20);
for(int i=1;i<=30;i++) {
stringBuffer3.append("a");
}
System.out.println(stringBuffer3.capacity());//42比20大
}
}
StringBuffer和string 有什么区别?
A:String定义后长度和内容就不可以改变
B:StringBuffer定义后既可以改变长度,也可以改变内容,可以把它看做是一个容器。
具体的使用实例:
public class Test2 {
public static void main(String[] args) {
//两个对象共享一块内存空间,拼接串则是在原来的串上进行拼接。
StringBuffer stringBuffer=new StringBuffer();
StringBuffer stringBuffer2=stringBuffer.append("你若安好,便是晴天");
System.out.println(stringBuffer2==stringBuffer);//地址值指向同一块内存空间。
System.out.println("**********************************************");
//如何把StringBuffer 类型转换为String类型
String string=stringBuffer.toString();//将StringBuffer转为String类型
System.out.println(string);
stringBuffer2.append(new char[] {'a','b','c'}).append(8.9).append(false);
String string2=stringBuffer2.toString();
System.out.println(string2);
System.out.println("***********************************************");
StringBuffer stringBuffer3=new StringBuffer();
stringBuffer3.append(false);
String string3=stringBuffer3.toString();//转换为字符串的false
System.out.println(string3);
}
}
结果:true
**********************************************
你若安好,便是晴天
你若安好,便是晴天abc8.9false
***********************************************
false
B:StringBuffer的方法:
public int capacity():返回当前容量。理论值
public int length():返回长度(字符数)。 实际值
public class Test3 {
public static void main(String[] args) {
StringBuffer stringBuffer=new StringBuffer(20);
stringBuffer.append("123456789");
System.out.println(stringBuffer.length());//9
System.out.println(stringBuffer.capacity());//20
}
C:StringBuffer的常用功能
具体由代码实现见注释
1:StringBuffer的添加功能
public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
public static void main(String[] args) {
StringBuffer stringBuffer=new StringBuffer("aaabbb");
stringBuffer.insert(3, "ccc");
String string=stringBuffer.toString();
System.out.println(string);//aaacccbbb
}
2:StringBuffer的删除功能
public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
stringBuffer.delete(1, stringBuffer.length()-1);//含头不含尾,若想将最后一个也删了,length()就不用减一
String string2=stringBuffer.toString();
System.out.println(string2);//ab
若想删除指定位置的数据则可以用public StringBuffer deleteCharAt(int index)
具体如下
stringBuffer.deleteCharAt(stringBuffer.length()-1);
结果是a
3:StringBuffer的替换功能
public StringBuffer replace(int start,int end,String str):从start开始到end用str替换
B:StringBuffer的反转功能
public StringBuffer reverse():字符串反转
C:案例演示
StringBuffer的替换和反转功能
StringBuffer stringBuffer2=new StringBuffer("一杯敬朝阳");
String string3=stringBuffer2.toString();
System.out.println(string3);//一杯敬朝阳
//stringBuffer2.replace(0, stringBuffer2.length(), "一杯敬明天");//一杯敬明天
stringBuffer2.reverse();
String string4=stringBuffer2.toString();
System.out.println(string4);//天明敬杯一
4:StringBuffer的截取功能
public String substring(int start):从指定位置截取到末尾
public String substring(int start,int end):截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
注意事项
注意:返回值类型不再是StringBuffer本身
举例:
StringBuffer stringBuffer3=new StringBuffer("你还要我怎样");
stringBuffer3.substring(0, stringBuffer3.length()-3);
String string5=stringBuffer3.substring(0, stringBuffer3.length()-1);//去头不去尾
//返回值类型是string类型。
System.out.println(string5);//你还要我怎
5:StringBuffer(A)和String(B)的转换
A-----》B
使用构造方法,使用append()方法
B-----》A
使用构造方法,使用substring()方法,使用tostring()方法。
public static void main(String[] args) {
//String ---->StringBuffer
String string="abc";
StringBuffer stringBuffer=new StringBuffer(string);//构造方法
stringBuffer.append(string);//通过append()
String string2=stringBuffer.toString();
System.out.println(string2);
//StringBuffer ---->String
String string3=stringBuffer.substring(0);//abcabc//使用substring方法
String string4=new String(stringBuffer);//abcabc//构造方法
String string5=stringBuffer.toString();//abcabc//通过tostring()方法
System.out.println(string3+string4+string5);
}
举例:
A:案例演示
需求:把数组中的数据按照指定个格式拼接成一个字符串
举例:
int[] arr = {1,2,3};
输出结果:
"[1, 2, 3]"
用StringBuffer的功能实现
public static void main(String[] args) {
int[] arr = { 1, 2, 3 };
StringBuffer sb = new StringBuffer("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
sb.append(arr[i]).append("]");
} else {
sb.append(arr[i]).append(",");
}
}
String string=sb.toString();
System.out.println(string);
}
结果:[1,2,3]
StringBuffer,StringBuilder的区别:
StringBuffer 同步是线程安全的,但是效率低一些
StringBuilder 不同步,线程不安全,效率高
传参数的问题:
public class Test7 {
public static void main(String[] args) {
String string="胡歌";
StringBuffer stringBuffer=new StringBuffer("薛之谦");
String string2=Test7 .setName(string);
StringBuffer stringBuffer2=Test7.setName(stringBuffer);
System.out.println(string);//胡歌
System.out.println(string2);//歌
System.out.println(stringBuffer);//谦之薛
System.out.println(stringBuffer2);//谦之薛
}
public static StringBuffer setName(StringBuffer p) {
p=p.reverse();
return p;
}
public static String setName(String p) {
String string=p.substring(1);
return string;
}
}
结论:String类型作为参数传递时,可以把它当做是基本数据类型,形参的改变不会影响实参的值。而stringBuffer是在同一个内存空间所以在形参改变的情况下,实参也跟着改变。
Arrary类
概述:针对数组进行操作的工具类
成员方法:
public static String toString(int[] a)
public static void sort(int[] a)
public static int binarySearch(int[] a,int key)
举例:public class Test {
public static void main(String[] args) {
Integer [] integers= {1,5,2,6,3,4};
String string=Arrays.toString(integers);
System.out.println(string);//以标准格式输出
Arrays.sort(integers);//排序
String string2=Arrays.toString(integers);
System.out.println(string2);
int aa=Arrays.binarySearch(integers, 2);//二分查找 有则返回索引无则返回负数。
System.out.println(aa);
}
结果:[1, 5, 2, 6, 3, 4]
[1, 2, 3, 4, 5, 6]
1