java常用类:StringBulider类

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效率高

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值