JAVA学习第三十一课(常用对象API)- StringBuffer类&&StringBuilder类

StringBuffer类

字符串的组成原理就是通过该类实现的

StringBuffer可以对字符串内容进行增删

StringBuffer是一个容器

很多方法和String相同

一、特点

StringBuffer字符串缓冲区,用于存放数据的容器

1.可变长度的

2.可以存储不同的数据类型

3.最终要转成字符串进行使用

4.对字符串进行修改

容器的特点:

1.添加 

append(data)

insert(index,data);

2.删除

StringBuffer delete(int start,int end)//含头,不含尾

deleteCharAt(int index) 移除此序列指定位置的
char。// 

3.查找

char charAt(index)

int indexOf(string)

int lastindexOf(string)

4.修改

StringBuffer replace(start,end,string)

void setcharAt(intdex,char)

CURD(增删改查)

5.其他

setlength(data)

reseve 将字符串反转

public class Main {
	public static void main(String[] args) {
	//StringBufferDemo();//添加
	//StringBufferDemo_1();
	StringBufferDemo_2();//删除
	StringBufferDemo_3();//修改
	}
	public static void StringBufferDemo()
	{
		StringBuffer SB = new StringBuffer();
		StringBuffer S1 = SB.append(4);
		System.out.println(SB);
		System.out.println(S1);
		System.out.println(SB == S1);
		S1 = SB.append(true).append("nihao");
		System.out.println(SB);
		SB.insert(1, "hehe");//在1的位置添加“hehe”
		System.out.println(SB);
	}
	public static void StringBufferDemo_1()
	{
		StringBuffer SB = new StringBuffer("qwer");
		SB.insert(2, 5);//qw5er
		System.out.println(SB);
	}
	public static void StringBufferDemo_2()
	{
		StringBuffer SB = new StringBuffer("qwer");

		SB.deleteCharAt(2);//删除一个
		SB.delete(1, 3);
		//清除
		SB.delete(0, SB.length());

		System.out.println(SB);
	}
	public static void StringBufferDemo_3()
	{
		StringBuffer SB = new StringBuffer("qwert");
		SB.replace(0, 3, "aaaaaaa");
		System.out.println(SB);

		SB.setCharAt(2, 'g');//注意是void

		SB.setLength(2);
		System.out.println("SB = "+SB);//如果设置的长度超过字符串本身,超出部分用空白填充
		System.out.println("LEN = "+SB.length());
		SB.reverse();//反转字符串
		System.out.println(SB);
	}
}

构造方法:StringBuffer()

构造一个不带字符的字符串缓冲区,初始容量为16

可变长度数组

往数组里存数据,当存不下的时候,会自动开辟一个新数组,新书组的长度一般是原数组的1倍左右,然后将原数组的数组复制过来,再继续进行新数据的存放,注意效率问题

二、StringBuilder类

实际上和StringBuffer一回事

严重的区别就是:诞生时间不一样

StringBuffer:保证同步,线程安全(JDK1.0):通常用于多线程

StringBuilder:不保证同步(JDK1.5):通常用于单线程,它的出现为了提高效率

应该优先使用StringBuilder,由于它不保证同步,所以效率高

class StringBuffer
{
	Object obj = new Object();
	public StringBuffer append()
	{
		synchronized (obj) {

		}
	}
	public StringBuffer delete()
	{
		synchronized (obj) {

		}
	}
	.....
}

加一次判断锁一次,所以效率低

三、练习:

public class Main {
	public static void main(String[] args)
	{
		int[] arr = {1,2,3,4,5,6,7,8,9};
		String str = ArryToString(arr);
		System.out.println("str : "+str);
	}

	/*将int数组变为字符串*/
	public static String ArryToString(int[] arr)
	{
		//String str = "[";
		StringBuilder str = new StringBuilder();
		str.append("[");
		for (int i = 0; i < arr.length-1; i++) {
			//str += arr[i] + ",";//一旦字符串常量池没有“,”,就要在字符串常量池 产生,所以尽量用StringBuilder
			str.append(arr[i]+",");
		}
		//str += arr[arr.length-1]+"]";
		str.append(arr[arr.length-1]+"]");

		return str.toString();

	}
}

时间: 2024-10-12 20:00:47

JAVA学习第三十一课(常用对象API)- StringBuffer类&&StringBuilder类的相关文章

JAVA学习第三十七课(常用对象API)- 集合框架(五)— Set集合:TreeSet集合

一.LinkedHashSet集合 HashSet下有子类LinkedHashSet API文档关于LinkedHashSet的解释: 具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现.此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表.此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代.注意,插入顺序不 受在 set 中重新插入的 元素的影响.(如果在 s.contains(e) 返回 true 后立即调用 s.add(

JAVA学习第三十三课(常用对象API)- 集合框架(一)

数字有很多用数组存,对象有很多就要用集合存 但是数组是固定长度的,集合是可变长度的 集合的由来: 对象用来封装特有数据,对象多了需要存储,如果对象个数不确定,就需要使用集合容器来存储 集合的特点: 1.用于存储对象的容器 2.长度可变 3.集合中不可存储基本数据类型 对于集合体系,的最顶层存储的是该体系中所有的共性内容,Collection,同继承一样,看顶层,用底层 java.uitil包中的Cellection 集合容器因为内部的数据不同,有多种具体容器,不断向上抽取,就形成了集合框架 整个

JAVA学习第三十课(常用对象API)- String类:类方法练习

intern方法 public class Main { public static void main(String[] args) { String str1 = new String("asd"); String str2 = str1.intern();/* 字符串常量池中有,就返回字符串,没有就创建 */ System.out.println(str2); System.out.println( str1 == str2 ); } } 练习1:字符串数组排序 import j

JAVA学习第六十一课 — TCP协议

TCP传输 Socket和ServerSocket 建立客户端和服务器端(两个独立的应用程序) 建立连接后,通过Socket中的IO流进行数据的传输 关闭Socket TCP和UDP原理差不多,只是涉及的对象不一样 TCP客户端 Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号. public static void TCPDemo() throws UnknownHostException, IOException { /* * T

JAVA学习第三十课(经常使用对象API)- String类:类方法练习

intern方法 public class Main { public static void main(String[] args) { String str1 = new String("asd"); String str2 = str1.intern();/* 字符串常量池中有,就返回字符串,没有就创建 */ System.out.println(str2); System.out.println( str1 == str2 ); } } 练习1:字符串数组排序 import j

JAVA学习第五十一课 — IO流(五)流的操作基本规律

转换流: InputStreamReader:字节到字符的桥梁.解码 OutputStreamWriter:字符到字节的桥梁.编码 流的基本规律 1.明确源和汇 源:InputStream.Reader 汇:OutputStream.Writer 2.明确数据是否是纯文本数据 源:如果是,Reader,否,InputStream 汇:如果是,Writer,否,OutputStream 前两点明确后院,体系也就明确了 3.明确具体的设备 源设备: 硬盘:File 键盘:System.in 内存:

JAVA学习第二十八课(常用对象API)- String类

多线程告一段落,开始常用对象API的涉及,背也要背下来!!! 日后开发,遇见最多的对象是文字,也就是字符串 String类 字符串是一个特殊对象 字符串一旦初始化就不可以被改变 一.特点 public class Main { public static void main(String[] args) { Demo1(); System.out.println("--------------"); Demo2(); } /*演示字符串的第一种定义方式,并明确字符串常量池的特点*/ p

201671010140. 2016-2017-2 《Java程序设计》java学习第三周

java学习第三周       不知不觉,学习java已经是第三周了,不同于初见时的无措,慌张,在接触一段时日后,渐渐熟悉了一些,了解到了它的便利之处,也体会到了它的一些难点,本周主攻第四章,<对象与类>,事实上,在第二周的实验中,我就已经接触过它了,当时我并不理解Scanner方法使用时,为什么要使用import语句,现在,通过学习第四章,我知道了,通过控制台进行输入时,需要构造一个Scanner对象,并与"标准输入流"System.in关联,使用import语句引入ja

angular学习笔记(三十一)-$location(2)

之前已经介绍了$location服务的基本用法:angular学习笔记(三十一)-$location(1). 这篇是上一篇的进阶,介绍$location的配置,兼容各版本浏览器,等. *注意,这里介绍的是基于angular-1.3.2版本的,低版本的$location可能会有问题. hashbang模式和history api创建单页应用 首先,$location是用在单页应用里的...(废话,angular就是用在单页的)...所以,$location处理的是url改变,但是不刷新页面的情况.