常用类库——StringBuffer类
掌握目标:
1,掌握StringBuffer与String的区别。
2,掌握StringBuffer常用方法。
3,掌握StringBuffer实际应用。
1,认识StringBuffer.
StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不同,String类的内容一旦声明则不可改变,改变的只是地址指向。而StringBuffer是可以改变的。
对于StringBuffer而言,本身是一个具体的操作类,所以不能像String类那样直接赋值的方式进行对象实例化,必须通过构造方法完成。
字符串连接
String用“+”号完成字符串连接,而StringBuffer用“append()”方法。
实例操作:字符串连接(append(String s))
在StringBuffer中提供了一系列append()方法,下面观察其使用,(一定要注意,这些方法都会返回StringBuffer类的实例化对象)。
public class StringBufferDemo01{
public static void main(String args[]){
StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象
buf.append("Hello ") ; // 向StringBuffer中添加内容
buf.append("World").append("!!!") ; // 可以连续调用append()方法
buf.append("\n") ; // 添加一个转义字符
buf.append("数字 = ").append(1).append("\n") ; // 添加数字
buf.append("字符 = ").append('C').append("\n"); // 添加字符
buf.append("布尔 = ").append(true) ; // 添加布尔值
System.out.println(buf) ; // 直接输出对象,调用toString()
}
};
结果:
Hello World!!!
数字 = 1
字符 = C
布尔 = true
继续验证StringBuffer内容是可以修改的,通过引用传递的方式完成。
package Thread1;
public class demo1{
public static void main(String args[]){
StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象
buf.append("Hello ") ;
fun(buf) ; // 传递StringBuffer内容
System.out.println(buf) ; // 打印内容
}
public static void fun(StringBuffer s){ // 接收StringBuffer引用
s.append("MLDN ").append("LiXingHua") ; // 修改StringBuffer的内容
}
};
允许结果:
Hello MLDN LiXingHua
从以上代码证明StringBuffer是可以改变的。
实例操作二:在任意位置处为StringBuffer添加内容。
可以直接使用insert()方法添加内容: public StringBuffer insert(int OffSet,boolean b);
package Thread1;
public class demo1{
public static void main(String args[]){
StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象
buf.append("World!!") ; // 添加内容
buf.insert(0,"Hello ") ; // 在第一个内容之前添加内容
System.out.println(buf) ;
buf.insert(buf.length(),"MLDN~") ; // 在最后添加内容
System.out.println(buf) ;
}
};
运行结果:
Hello World!!
Hello World!!MLDN~
在StringBuffer中与Stirng类非处相似的是,都可以使用length()方法求出字符串长度。
实例操作三:字符串反转操作:public StringBuffer reverse()
直接使用reverse()方法可以完成反转功能,public StringBuffer reverse()。
public class StringBufferDemo04{
public static void main(String args[]){
StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象
buf.append("World!!") ; // 添加内容
buf.insert(0,"Hello ") ; // 在第一个内容之前添加内容
String str = buf.reverse().toString() ; // 将内容反转后变为String类型
System.out.println(str) ; // 将内容输出
}
};
运行结果:
!!dlroW olleH
对于上文红色部分,有两种方式:
一:讲内容反转后,转换成String类型,赋值给String类型的字符串。
String str = buf.reverse().toString() ;
二,讲内容反转后,赋值给StringBuffer类型的对象。
StringBuffer str = buf.reverse() ;
实例操作四:替换指定范围的内容
在StringBuffer中也存在replace()方法,也可以使用此方法对指定内容替换。
public StringBuffer replace(int start,int end,String str);
public class StringBufferDemo05{
public static void main(String args[]){
StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象
buf.append("Hello ").append("World!!") ; // 向StringBuffer添加内容
buf.replace(6,11,"LiXingHua") ; // 将world的内容替换
System.out.println("内容替换之后的结果:" + buf) ; // 输出内容
}
};
运行结果:
内容替换之后的结果:Hello LiXingHua!!
实例操作五:字符串截取
通过subString()直接从StringBuffer 中指定范围内截取内容。public String substring(int start,int end)
package Thread1;
public class demo1{
public static void main(String args[]){
StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象
buf.append("Hello ").append("World!!") ; // 向StringBuffer添加内容
buf.replace(6,11,"LiXingHua") ; // 将world的内容替换
String str = buf.substring(6,15) ; // 截取指定范围的内容
System.out.println("内容替换之后的结果:" + str) ; // 输出内容
}
};
运行结果:
内容替换之后的结果:LiXingHua
实例操作六:删除指定范围内容:delet(int start,int end);
因为StringBuffer的内容是可以修改的,所以可以用delet()删除指定范围内容:public string delete(int start,int end)
package Thread1;
public class demo1{
public static void main(String args[]){
StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象
buf.append("Hello ").append("World!!") ; // 向StringBuffer添加内容
buf.replace(6,11,"LiXingHua") ; // 将world的内容替换
String str = buf.delete(6,15).toString() ; // 删除指定范围中的内容
System.out.println("删除之后的结果:" + str) ; // 输出内容
}
};
运行结果:
删除之后的结果:Hello !!
实例操作七:查找指定的内容是否存在:indexof()
在String中,可以使用indexof()方法进行查找,在StringBuffer中可以继续使用这个方法。此方法如果找到了,返回位置,否则返回-1。
public class StringBufferDemo08{
public static void main(String args[]){
StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象
buf.append("Hello ").append("World!!") ; // 向StringBuffer添加内容
if(buf.indexOf("World")==-1){
System.out.println("没有查找到指定的内容") ;
}else{ // 不为-1表示查找到内容
System.out.println("可以查找到指定的内容,位置在第"+buf.indexOf("World")) ;
}
}
};
运行结果:
可以查找到指定的内容,位置在第6
以上的方法对于String类也是存在的,使用的时候可以根据DOC文档查看即可。
StringBuffer的应用
观察以下代码,咱们之前已经在String中介绍过了。
public class StringBufferDemo09{
public static void main(String args[]){
String str1 = "LiXingHua" ;
for(int i=0;i<100;i++){
str1 += i ; // 不断修改String的内存引用,性能低
}
System.out.println(str1) ;
}
};
以上操作方法因为频繁修改字符串的内容,所以使用String是不合理的,最好的做法是使用StringBuffer。
public class StringBufferDemo10{
public static void main(String args[]){
StringBuffer buf = new StringBuffer() ;
buf.append("LiXingHua") ;
for(int i=0;i<100;i++){
buf.append(i); // StringBuffer可以修改,性能高
}
System.out.println(buf) ;
}
};
对于StringBuffer而言,在频繁修改字符串的时候,性能更高。
总结
凡是要频繁修改字符串内容的时候,都要使用StringBuffer完成,而且StringBuffer也提供了一些String类没有的方法,比如delete(),insert()。
常用类库——StringBuffer类的更多相关文章
- Java 常用对象-StringBuffer类
2017-11-02 20:57:02 StringBuffer:线程安全的可变字符序列.一个类似于 String 的字符串缓冲区,但不能修改.虽然在任意时间点上它都包含某种特定的字符序列,但通过某些 ...
- java 常用类库:String ; StringBuilder和StringBuffer类
1. String 1.String对象是不可变的 String类的value属性是用来存放字符串里面的值的.这个属性是被final修饰的.final修饰的变量不能够被第二次赋值,所以字符串是不可变的 ...
- Java 基础 常用API (Object类,String类,StringBuffer类)
Java API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类将底 ...
- Java 常用类String类、StringBuffer类
常用类 String类.StringBuffer类 String代表不可变的字符序列 "xxxxxxx"为该类的对象 举例(1) public class Test { publi ...
- java常用类与包装类--常用类字符串String类、StringBuffer类、Stringbuilder类
1.String类 1.1String类的概念和储存结构: (1)字符串是一个比较特殊的对象,可以使用new,也可以不使用new来创建字符串对象 String s1 = new String(&quo ...
- 【java】String类和StringBuffer类常用操作
String类是字符串常量,是不可更改的常量.而StringBuffer是字符串变量,它的对象是可以扩充和修改的.StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于Stri ...
- [19/03/15-星期五] 常用类_String类&StringBuilder和StringBuffer类
一.基本概念 String 类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为“不可变对象”. 那什么叫做“不可变对象”呢? 指的是对象内部的成员变量的值无法再改变.Str ...
- Java 中 常用API概述之 Math, Object, String,StringBuffer类,Arrays,Integer类
Math Math类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数. 与StrictMath类的一些数字方法不同,Math类的StrictMath所有Math都没有定义为返回比特位相同 ...
- Java 类库和常用类库
Java 类库概念: Java 的应用程序接口 (API) 以包的形式来组织,每个包提供了大量的相关类.接口和异常处理类,这些包的集合就是 Java 的类库 包名以 Java 开始的包是 Java 核 ...
随机推荐
- JSDoc那些事
几天工作上需要文档化一些Javascript东西,所以在找一些JS文档化工具,以下分析几种工具. 1.JSDoc-toolkit 一开始还想用这个工具,但后来在解析生成文档时候,出现了很严重的错误,还 ...
- SharePoint 2013 列表多表联合查询
在SharePoint的企业应用中,遇到复杂的逻辑的时候,我们会需要多表查询:SharePoint和Sql数据表一样,也支持多表联合查询,但是不像Sql语句那样简单,需要使用SPQuery的Joins ...
- Sharepoint 2013 列表使用JS Link
使用JS Link可以向Sharepoint List注册脚本,重写Field模板,使得对于符合条件的字段改变格式和样式.但是有一个问题是,页面postback的话,JS不会被触发,不知道怎么解,有知 ...
- NLog 自定义字段 写入 oracle
1.通过Nuget安装NLog 下载,简单入门 请参照 我刚才转的几篇文章,下面我直接贴代码 2.建表语句 create table TBL_LOG ( id ) not null, appname ...
- 《android传感器高级编程》译者序
翻看手机中的应用,就能发现大多数应用都已经使用了传感器.让微信彻底火起来的“附近的人”和“摇一摇”.碰一碰交换信息的Bump.各种运动记录app.神奇的“磁力探测仪”.火爆的游戏Temple Run… ...
- C语言泛型编程--抽象数据类型
一.数据类型: 在任何编程语言中,数据类型作为一个整体,ANSI-C包含的类型为:int.double.char……,程序员很少满意语言本身提供的数据类型,一个简单的办法就是构造类似:array.st ...
- IIS下打印报表到Excel
阅读本文之前,请先看上一篇文章<.NET下Excel报表的打印>. 上一篇文章<.NET下Excel报表的打印>介绍了关于报表打印到Excel文件中的方法.若要把项目通过IIS ...
- iOS扫一扫功能开发
之前很多二维码扫描都是基于zxing做的,但是zxing用起来真的很麻烦,又一直不更新.随着iOS6退出历史舞台,终于可以使用iOS7以后,用系统的AVFoundation做的二维码扫描器了. 初始化 ...
- SVN Can't open file 'xxx':Premission denied
换了一台电脑,重新搭建本地svn服务器的时候,服务器搭起来了,但是用Cornerstone往服务器上传工程的时候报错 报错有以上两种,都是因为文件权限的限制 解决方法 第一种报错 1.在Finder里 ...
- 又一个悬而未决的bug被解决
之所以叫悬而未决,是因为从我第一次见到这个bug,到现在大概已经过了快两年的时间,期间好几次想解决这个问题,但是一直碍于环境和一些技术上的限制,没有解决,直到昨天在一系列的因素作用下,终于解决了这个问 ...