StringBulider类
概述
一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用StringBuilder较多。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
(上面这段看不到可以不看,复制来的!!!)
先了解下String :
- String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。
String a = “aaa”; //假设a指向地址0x0001
a = “bbb”; //重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。
- 因此String的操作都是改变赋值地址而不是改变值操作。
stringBulider
- StringBuffer类的对象是可变字符串,任何对它指向的字符串的操作都不会产生新的对象。 每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
StringBuild的构造方法
作用:创建当前类型对象,也可以将其他类型的对象转换为该类型对象.
- StringBuilder(); 创建一个StringBulider对象,并且开辟一个长度为16个字符的空间.
- StringBuilder(int capacity); 创建一个StringBuilder对象,长度为capacity个字符的空间.
- StringBuilder(String str); 创建一个StringBuilder对象,把一个String对象转为一个StringBuilder对象.此时初始容量等于str.length()+16;
- 获取初始容量的方法 : capacity(); 返回value数组属性长度的数组.
- 获取StringBuilder长度的方法 :length(); 返回的是真实长度(已储存字符的个数).
public class StringBuilder构造方法 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
int i = sb.capacity(); //capacity方法返回容器长度
int l = sb.length(); //length();返回储存的字符串的长度
System.out.println(i);
System.out.println(l);
StringBuilder sb2 = new StringBuilder("aaaaaaaaaaaaaaaaaaaa");
int i2 = sb2.capacity(); //capacity方法返回容器长度
int l2 = sb2.length(); //length();返回储存的字符串的长度
System.out.println(i2);
System.out.println(l2);
}
}
StringBuild提供的相关功能
- append(任意数据类型); 在StringBuilder对象结尾处拼接新的字符串,而且拼接前先把数据转为字符串在拼接
- insert(int offset, 任意数据类型); 在StringBuilder对象中指定下标位置插入指定字符串.
public class StringBuilder_拼接 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("ture");
//在末尾拼接double类型的1222.3
sb.append(1222.3);
System.out.println(sb);
//在0位置插入false
sb.insert(0, false);
System.out.println(sb);
}
}
StringBuilder的删除功能
- delete(int start, int end);删除下标这一段,含头不含尾.
- deleteCharAt(int index);删除指定下标的单个字符.
public class StringBuilder_删除 {
public static void main(String[] args) {
String s = "1234.567";
StringBuilder sb = new StringBuilder(s);
System.out.println(sb);
//删除一段
sb.delete(3, 4);
System.out.println(sb);
//删除一个
sb.deleteCharAt(3);
System.out.println(sb);
}
}
StringBuilder的修改功能
- replace(int start, int end, String str);替换.
- reverse();把原来字符串反转过来.abc–>cba
public class StringBuilder_替换和反转 {
public static void main(String[] args) {
char[] arr = {'1','2','5'};
//把数组转为字符串类型
String s = new String(arr);
//把字符串转为StringBuilder类对象
StringBuilder sb = new StringBuilder(s);
//把字符串反转
sb.reverse();
System.out.println(sb);
//把'1'删掉
sb.replace(2, 3, "刘亦菲");
System.out.println(sb);
}
}
String和StringBuilder互相转换
String转StringBuilder
- StringBuilder(String str);
- 创建一个StringBuilder()空参的对象.调用 append(String str) 或者insert(0,String str);
StringBuilder转String
- StringBuild对象.toString();
- String(StringBuilder sb); 调用String的构造方法.
public class String_StringBuilder_互转 {
public static void main(String[] args) {
String s = new String("我爱你");
StringBuilder sb = new StringBuilder("我爱你");
//String 转 StringBuilder
StringBuilder sb1 = new StringBuilder(s); //用空参构造转
StringBuilder sb2 = new StringBuilder();
sb2.append(s); //用append拼接一个字符串也可以转
// StringBuilder转String
String a = sb.toString();
System.out.println(a);
}
}
String和StringBuilder作为方法参数时区别
- String为不可变对象,对其进行操作将生成不一样的对象。
- StringBuilder为可变对象,可以直接在原对象上面进行操作。StringBuilder作为方法参数时其实就是传递引用地址。
StringBuilder和StringBuffer的区别
1.共同点: 都是字符串缓冲区, 都是可变字符串对象. 存储都是可变字符串序列;
2.不同点:
1.出现的版本不同
1.StringBuffer JDK1.0
2.StringBuilder JDK1.5
2. 线程安全性不同
1.StringBuffer是线程安全的, 能保证数据在多线程下的安全性
2.StringBuilder是线程不安全. 不能数据在多线程下的安全性;
3. 效率不同
1.StringBuffer效率低
2.StringBuilder效率高