java基础知识回顾之---java StringBuffer类
/*
* StringBuffer:就是字符串缓冲区,线程安全。
* 用于存储数据的容器。
* 特点:
* 1,长度的可变的。
* 2,可以存储不同类型数据。
* 3,最终要转成字符串进行使用。
* 4,可以对字符串进行修改。
*
* 构造方法:
* StringBuffer() :构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
StringBuffer(int capacity): 构造一个不带字符,但具有指定初始容量的字符串缓冲区。
* 效率:
* 如果事先知道要往容器中放多少字符,则使用第二中效率更高,因为虽然此容器室可变的,但是内部使用可变数组
* ,每次增长数组的长度,需要浪费时间,因为每次需要重新创建一个长度为原来数组两倍的新数组,
* 而且还要复制原来数组的元素,需要一定的时间。
* 看源码发现:StringBuffer 父类AbstractStringBuilder的方法:需要执行以下方法往容器里面填充:
*
* void expandCapacity(int minimumCapacity) {
int newCapacity = (value.length + 1) * 2;//原来数组的两倍多
if (newCapacity < 0) {
newCapacity = Integer.MAX_VALUE;
} else if (minimumCapacity > newCapacity) {
newCapacity = minimumCapacity;
}
value = Arrays.copyOf(value, newCapacity);//把原来数组的值复制到新数组当中,value代表原始数组,代表新数组的长度
}
*
*
* 既然是一个容器对象。应该具备什么功能呢?
* 1,添加:不同类型的数据
* StringBuffer append(data);
* StringBuffer insert(index,data);//在某个位置进行插入
* 2,删除:
* StringBuffer delete(start,end):包含头,不包含尾。
* StringBuffer deleteCharAt(int index):删除指定位置的元素
* 3,查找:
* char charAt(index);//查找元素
* int indexOf(string);//查找位置(第一次出现)
* int lastIndexOf(string);//查找位置(最后一次出现)
* 4,修改:
* StringBuffer replace(start,end,string);//替换子字符串中的字符,使用给定字符串
* void setCharAt(index,char);//使用一个字符,替换指定位置上的字符
*
* 增删改查 C(create)U(update)R(read)D(delete)
*
* 特殊方法:
* 5。设置字符串的长度public void setLength(int newLength) newLength 参数必须大于或等于 0。
* 如果 newLength 参数小于当前长度,则长度将更改为指定的长度。
如果 newLength 参数大于或等于当前长度,则将追加有效的 null 字符 ('\u0000'),使长度满足 newLength 参数。
看源码发现:value代表原始数组。
public void setLength(int newLength) {
if (newLength < 0)
throw new StringIndexOutOfBoundsException(newLength);
if (newLength > value.length)
expandCapacity(newLength);
if (count < newLength) {
for (; count < newLength; count++)
value[count] = '\0';
} else {
count = newLength;
}
}
*/
public class StringBufferDemo {
/**
* @param args
*/
public static void main(String[] args) {
bufferMethodDemo_2();
}
private static void bufferMethodDemo_2() {
StringBuffer sb = new StringBuffer("abce");
//删除
sb.delete(1, 3);//ae
sb.delete(0,sb.length());//清空缓冲区。
//sb = new StringBuffer();
sb.append("abced");
sb.replace(1, 3, "nba");//包含头,不包含尾部,替换,1,2位置:b和c
System.out.println("repalce***********"+sb.toString());//输出repalce***********anbaed
sb.setCharAt(2, 'q');//输出
System.out.println("setCharAt******:"+sb);//输出setCharAt******:anqaed
sb.setLength(10);//设置字符序列的长度
System.out.println("sb:"+sb);
System.out.println("len:"+sb.length());
System.out.println(""+sb.reverse().toString());//输出deaqna
}
private static void bufferMethodDemo_1() {
StringBuffer sb = new StringBuffer("abce");
// sb.append("xixi");
sb.insert(2, "qq");//在c的位置进行插入,c向后顺延,输出abqqce
System.out.println(sb.toString());
}
public static void bufferMethodDemo(){
//创建缓冲区对象。
StringBuffer sb = new StringBuffer();
sb.append(4).append(false);//.append("haha");
sb.insert(1, "haha");
// sb.append(true);
System.out.println(sb);
}
}
java基础知识回顾之---java StringBuffer类的更多相关文章
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- Java基础知识强化36:StringBuffer类之StringBuffer的概述
1. StringBuffer类概述: (1)String的缺陷: 我们如果对字符串进行拼接操作,每次拼接,都会构造一个新的String对象,既耗时,又浪费空间.如下图: (2)StringBuffe ...
- java基础知识回顾之java集合类-Properties集合
/** java.lang.Object |--java.util.Dictionary<K,V> |--java.util.Hashtable<Object,Obje ...
- Java基础知识强化43:StringBuffer类之StringBuffer和String的相互转化
1. String和StringBuffer的相互转换 思想是:A-----B的转换,我们把A转换为B,其实是为了使用B的功能:B-----A的转换,我们可能的结果是A类型,所以还要转换回来 2. 案 ...
- java基础知识回顾之java Thread类学习(八)--java.util.concurrent.locks(JDK1.5)与synchronized异同讲解
看API文档介绍几个方法: JDK1.5中提供了多线程的升级解决方案: 特点: 1.将同步synchronized显示的替换成Lock 2.接口Conditio ...
- java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)
*java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时 ...
- java基础知识回顾之java Thread类学习(三)--java线程实现常见的两种方式实现好处:
总结:实现Runnable接口比继承Thread类更有优势: 1.因为java只能单继承,实现Runnable接口可以避免单继承的局限性 2.继承Thread类,多个线程不能处理或者共享同一个资源,但 ...
- java基础知识回顾之---java String final类 容易混淆的java String常量池内存分析
/** * 栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放 在常量池中). 堆(heap):存 ...
- Java基础知识强化47:StringBuffer类之StringBuffer的三个面试题
1. 面试题:String,StringBuffer,StringBuilder的区别 ? 答:String是字符串内容不可变的,而StringBuffer和StringBuilder是字符串内容长度 ...
随机推荐
- Qt学习总结-ui篇
控件设置透明度: QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect(this); effect->setOpacity(0. ...
- 使用JDBC向数据库中插入一条数据
原谅我是初学者,这个方法写的很烂,以后不会改进,谢谢 /** * 通过JDBC向数据库中插入一条数据 1.Statement 用于执行SQL语句的对象 1.1 通过Connection 的 * cre ...
- u-boot ctr0.S详解 包含_main函数
/** ****************************************************************************** * @author Maox ...
- Java Web动态配置log4j
导入log4j的jar包, 在web.xml中做如下配置 <!-- Log4j Configuration --> <context-param> <param-name ...
- js设计模式(5)---外观模式
0.前言 早上好,今天天气不错,估计有35度吧,坐在空调室里相当惬意,那么酒足饭饱之后就应该干些正事了. 1. 为什么使用外观模式 外观模式提供了一个高层接口,封装一些复杂操作或繁琐行为,方便调用.门 ...
- struct和class区别
转载来源:http://blog.sina.com.cn/s/blog_48f587a80100k630.html C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据 ...
- svn 清空
SVN是目前用得比较多的而且很方便的版本管理体系. 在开发过程中遇到了这样的问题: 有时我们需要一个干净的code版本,没有 .svn 这些文件夹记录的版本传到服务器上使用. 这个时候自己一个个去删除 ...
- 使用Azure portal Create Virtual Machine
使用简单快速的方式穿件的Virtual Machine 这个步骤隐藏的了很多步骤,例如的创建的云服务(Cloud Service) 创建存储(Storage) 存储名为系统自动产生 可以通过存储看到含 ...
- WIN7右下角的声音图标不见了
有时候电脑启动了,但是声音图标却不见了,造成调试声音相当的麻烦,那么怎么来处理呢? 一:ctrl+shit+Esc键打开任务管理器 二:找到exeplore.exe,结束进程. 三:重新建立进程 上述 ...
- CentOS 6.3 配置 yum
ContOS 配置yum:1.cd /etc/yum.repos.d2.创建个任意目录,将所有文件移动到创建的目录中,除了CentOS-Media.repo3.编辑CentOS-Media.repov ...