一.StringBuffer类
1.StringBuffer
2.StringBuffer的构造方法
3.StringBuffer的取容量和长度的方法:
4.StringBuffer添加功能方法:
5. StringBuffer删除功能的方法
6.StringBuffer替换和反转功能的方法
7.StringBuffer截取功能的方法
二.StringBuilder类
三.StringJoiner类
四.String类,StringBuffer类和StringBuilder类的区别
我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间.StringBuffer就可以解决这个问题.
StringBuffer是一个字符容器,是线程安全的可变字符序列.
public class Test {
public static void main(String[] args) {
// StringBuffer:长度可变的字符容器。
/* StringBuffer() 构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。*/
StringBuffer sb = new StringBuffer();
//你可以指定容器容量,例如指定100
StringBuffer stringBuffer = new StringBuffer(100);
//指定字符串内容的字符串缓冲区对象
StringBuffer sb2 = new StringBuffer("abc");
}
}
public class Test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
StringBuffer stringBuffer = new StringBuffer(100);
StringBuffer sb2 = new StringBuffer("abc");
//获取容量的方法
int capacity1 = sb.capacity();
System.out.println(capacity1); //16
int capacity2 = stringBuffer.capacity();
System.out.println(capacity2); //100
int capacity3 = sb2.capacity();
System.out.println(capacity3); //19=16+3 16:默认容量 3:abc字符串的长度
//获取字符容器的长度
int length1 = sb.length();
System.out.println(length1); //0
int length2 = stringBuffer.length();
System.out.println(length2); //0
int length3 = sb2.length();
System.out.println(length3); //3
}
}
如何区分容量和长度?
按照生活中的实例水杯来说:一个水杯的额定容量是500ML ,实际装水 100ML.那么容量就是500ML,长度为100ML.也就是,容量为总的容量,而长度就是实际装的容量.
注意:有参构造方法的容量为16(默认容量)+字符串的长度.(StringBuffer的容量如果超过16,会自动扩展.)
public class Test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("秃头小编");
//往容器中追加内容,返回的还是原来的容器本身。
//append()
StringBuffer sb2 = sb.append("不想再秃头");
//sb 和 sb2 是同一个容器对象吗?是
System.out.println(sb == sb2); //true
StringBuffer sb3 = new StringBuffer();
sb3.append("我").append("爱").append("你").append(10000).append("年").append(true);
//StringBuffer 重写了toString方法,把容器中的数据,转换成字符串返回
String str = sb3.toString();
System.out.println(str); //我爱你10000年true
//insert()
StringBuffer sb4 = new StringBuffer();
sb4.append("aaa");
sb4.append("ccc");
sb4.append("ddd");
System.out.println(sb4); //aaacccddd
//可以往指定索引处,追加内容,返回的还是原来的容器
sb4.insert(2, "eee");
System.out.println(sb4); //aaeeeacccddd
}
}
public class Test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer().append("删除指定位置的字符,并返回本身");
//字符容器中的字符,也是编有索引的 ,从0开始
//根据索引删除容器中的某个字符,返回的还是原来的容器
sb.deleteCharAt(0);
System.out.println(sb); //除指定位置的字符,并返回本身
//从起始索引到终止索引,来删除容器中一段内容,返回的还是容器本身,含头不含尾
sb.delete(0, 3);
System.out.println(sb); //位置的字符,并返回本身
}
}
public class Test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer().append("从start开始到end用str替换");
//根据起始索引和终止索引,替换容器中一步分内容,返回的还是容器本身
sb.replace(0, sb.indexOf("到") + 1, "呵呵");
System.out.println(sb); //呵呵end用str替换
//StringBuffer的反转功能
sb.reverse();
System.out.println(sb); //换替rts用dne呵呵
}
}
注意:返回值类型不再是StringBuffer本身
public class Test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer().append("StringBuffer的截取功能");
//根据起始索引和终止索引,从容器中截取一部分内容返回,注意返回的是字符串
String s = sb.substring(0, sb.indexOf("的")); //含头不含尾
//返回的不再是容器本身
System.out.println(s); //StringBuffer
System.out.println(sb); //StringBuffer的截取功能
}
}
首先StringBuilder中的方法与StringBuffer中的方法完全一样.
其区别在于:StringBuilder是线程不安全的可变字符序列.执行效率要比StringBuffer高一些.
StringBuilder类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer要快。
import java.util.StringJoiner;
public class Test {
public static void main(String[] args) {
//构建了一个字符容器,指定分隔符
StringJoiner sj=new StringJoiner(",");
//add只能拼接字符串
sj.add("1111").add("2222").add("3333");
System.out.println(sj); //1111,2222,3333
//构建了一个字符容器,指定分隔符,前缀,后缀
StringJoiner sj2=new StringJoiner(",","[","]");
sj2.add("aaa").add("bbb").add("ccc");
System.out.println(sj2); //[aaa,bbb,ccc]
//返回该 StringJoiner的 String表示长度
int a=sj.length();
System.out.println(a); //14
//StringJoiner中的toString方法重写了,调用重写之后的toString方法,把容器中的数据以字符串返回
System.out.println(sj2.toString()); //[aaa,bbb,ccc]
}
}
(小编也在努力学习更多哟!以后会多多分享哒!)
希望对友友们有所帮助!!!!