1.1 认识StringBuffer
StringBuffer是使用缓冲区的,本身也是操作字符串的,但是
与string类不同的是,string类的内容一旦声明以后不可以改变
,改变的只是其内存地址的指向,而StringBuffer中的内容是可
以改变的。
对于StringBuffer,本身是一个具体的操作类,所以不能String类
那样采用直接赋值的方法进行对象实例化,必须通过构造方法调
用。
当一个字符串的内容需要经常改变的时候,就需要使
StringBuffer
public final class StringBufferextends Objectimplements
Serializable, CharSequence
线程安全的可变字符序列。一个类似于 String 的字符串缓冲区
,但不能修改。虽然在任意时间点上它都包含某种特定的字符序
列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方
法进行同步,因此任意特定实例上的所有操作就好像是以串行顺
序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致
。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载
这些方法,以接受任意类型的数据。每个方法都能有效地将给定
的数据转换成字符串,然后将该字符串的字符追加或插入到字符
串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;
而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容为 "start" 的字符串缓冲区对
象,则此方法调用 z.append("le") 会使字符串缓冲区包含
"startle",而 z.insert(4, "le") 将更改字符串缓冲区,使之
包含 "starlet"。
通常,如果 sb 引用 StringBuilder 的一个实例,则
sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果
。
当发生与源序列有关的操作(如源序列中的追加或插入操作)时
,该类只在执行此操作的字符串缓冲区上而不是在源上实现同步
。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的
字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数
组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,
为该类补充了一个单个线程使用的等价类,即 StringBuilder。
与该类相比,通常应该优先使用 StringBuilder 类,因为它支持
所有相同的操作,但由于它不执行同步,所以速度更快。
1.2 StringBuffer \\ append()方法:字符串连接操作
append()方法:字符串连接操作
在 StringBuffer中提供了一系列的append()方法,观察之:
(注意:这些方法最终都会返回StringBuffer类的实例化对象)
public class StringBufferDemo01
{
public static void main(String args[]){
StringBuffer buf = new StringBuffer();
buf.append("hello");
buf.append("hello").append("!!");
buf.append("\n");
buf.append(true);
buf.append("\n");
buf.append("fhkdf");
System.out.println(buf);//调用tostring()方法
}
}
实例二
:public class StringBufferDemo02
{
public static void main(String args[]){
StringBuffer buf = new StringBuffer();
buf.append("hello");
fun(buf);
System.out.println(buf);//调用tostring()方法
}
public static void fun(StringBuffer s){
s.append("worlsd").append("sdfks");
}
}
结果:
F:\java\stringbuffer>javac StringBufferDemo02.java
F:\java\stringbuffer>java StringBufferDemo02
helloworlsdsdfks
从以上实例可以看出:StringBuffer的内容是可以改变的。
1.3 StringBuffer:实例操作:在任意位置处为StringBuffer添
加内容。
public StringBuffer insert(int offset, boolean b)
实例:
public class StringBufferDemo02
{
public static void main(String args[]){
StringBuffer buf = new StringBuffer();
buf.append("hello");
buf.insert(1,"licaho ");
buf.insert(buf.length(),"!!!!");
System.out.println(buf);//调用tostring()方法
}
}
在StringBuffer中与string非常相似的是都可以使用length方法
求出字符串长度。
1.4 字符串反转操作 public StringBuffer reverse()
将此字符序列用其反转形式取代。如果序列中存在代理项对
(surrogate pair),在 reverse 操作中将其作为单个字符处理。
因此,高-低代理项的顺序不会反转。假设 n 为执行 reverse 方
法前此字符序列的字符长度(并非 char 值的长度),则新字符
序列中索引 k 处的字符将等于原字符序列索引 n-k-1 处的字符
。
注意,进行 reverse 操作后,执行操作前未成对的低代理项和高
代理项将成为代理项对。例如,反转 "\uDC00\uD800" 将生成有
效的代理项对 "\uD800\uDC00"。
返回:
此对象的一个引用。
实例:
public class StringBufferDemo02
{
public static void main(String args[]){
StringBuffer buf = new StringBuffer();
buf.append("world");
buf.insert(0,"hello ");
buf.insert(buf.length(),"!!!!");
//buf.reverse();
String str = buf.reverse().toString();//将内容反
转后变为String类型
System.out.println(str);//调用tostring()方法
}
}
1.5 替换指定范围的内容
public StringBuffer replace(int start,int end,String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。该
子字符串从指定的 start 处开始,一直到索引 end - 1 处的字
符,如果不存在这种字符,则一直到序列尾部。先将子字符串中
的字符移除,然后将指定的 String 插入 start。(如果需要,
序列将延长以适应指定的字符串。)
参数:
start - 起始索引(包含)。
end - 结束索引(不包含)。
str - 将替换原有内容的字符串。
返回:
此对象。
抛出:
StringIndexOutOfBoundsException - 如果 start 为负、大于
length() 或大于 end。
实例:
public class StringBufferDemo02
{
public static void main(String args[]){
StringBuffer buf = new StringBuffer();
buf.append("hello ").append("world!!");
buf.replace(6,11,"liuchao");
System.out.println(buf);//调用tostring()方法
}
}
1.6 字符串截取 public String substring(int start)
返回一个新的 String,它包含此字符序列当前所包含的字符子序
列。该子字符串始于指定索引处的字符,一直到此字符串末尾。
参数:
start - 起始索引(包含)。
返回:
新的字符串。
抛出:
StringIndexOutOfBoundsException - 如果 start 小于 0,或大
于此对象的长度。
实例:
public class StringBufferDemo02
{
public static void main(String args[]){
StringBuffer buf = new StringBuffer();
buf.append("hello ").append("world!!");
buf.replace(6,11,"liuchao");
String str = buf.substring(0,7);
System.out.println(str);//调用tostring()方法
}
}
1.7 删除字符串 public StringBuffer delete(int start,int
end)
移除此序列的子字符串中的字符。该子字符串从指定的 start 处
开始,一直到索引 end - 1 处的字符,如果不存在这种字符,则
一直到序列尾部。如果 start 等于 end,则不发生任何更改。
参数:
start - 起始索引(包含)。
end - 结束索引(不包含)。
返回:
此对象。
抛出:
StringIndexOutOfBoundsException - 如果 start 为负、大于
length() 或大于 end。
实例:
public class StringBufferDemo02
{
public static void main(String args[]){
StringBuffer buf = new StringBuffer();
buf.append("hello ").append("world!!");
buf.replace(6,11,"liuchao");
//String str = buf.substring(0,7);
buf.delete(0,7);
System.out.println(buf);//调用tostring()方法
}
}
1.8 查找指定内容 indexOf
public int indexOf(String str,
int fromIndex)从指定的索引处开始,返回
第一次出现的指定子字符串在该字符串中的索引。返回的整数是
满足以下条件的最小 k 值:
k >= Math.min(fromIndex, str.length()) &&
this.toString().startsWith(str, k)
如果不存在这样的 k 值,则返回 -1。
参数:
str - 要搜索的子字符串。
fromIndex - 搜索开始处的索引。
返回:
从指定的索引处开始,返回第一次出现的指定子字符串在该字符
串中的索引。
抛出:
NullPointerException - 如果 str 为 null。
实例:
public class StringBufferDemo02
{
public static void main(String args[]){
StringBuffer buf = new StringBuffer();
buf.append("hello ").append("world!!");
if(buf.indexOf("hello")== -1){
System.out.println("no");
}
else {
System.out.println("yes");
}
//System.out.println(buf);//调用tostring()方法
}
}
public class StringBufferDemo02
{
public static void main(String args[]){
StringBuffer buf = new StringBuffer();
buf.append("hello");
//String str = "hello";
for(int i = 0;i < 100;i++){
buf.append(i);
}
System.out.println(buf);
}
}
分享到:
相关推荐
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...
Java学习笔记1 Java学习笔记1是学习Java过程中的笔记,主要记录了Eclipse开发环境中的快捷键使用、编辑功能、查找和调试等知识点。 Eclipse快捷键 Eclipse中有许多快捷键,掌握这些快捷键可以大大提高开发效率。...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。
java完整学习笔记 JAVA学习目录
Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言:Java是一种面向对象的...
"Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...
这份《java学习》笔记包含了多个核心主题,旨在帮助初学者和有经验的开发者深入理解和掌握Java技术。 1. **正则表达式(正则.md)**: 正则表达式在Java中用于文本匹配和搜索,是处理字符串的强大工具。Java提供了...
《JAVA学习笔记》是林信良先生的一部深入浅出的Java编程教程,旨在帮助初学者和有一定经验的开发者巩固和提升Java编程技能。这本书涵盖了Java语言的基础到高级概念,是一份宝贵的自学资料。 首先,从基础部分开始,...
本知识点的标题为“Java学习笔记(必看经典)”,意味着所整理的内容是针对Java初学者的一系列核心概念和原理的总结。 首先,面向对象编程是Java语言的核心,它与传统的面向过程编程有显著的不同。面向对象编程强调的...
【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...
本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...
### Java学习笔记及心得知识点详细解析 #### 标题:Java学习笔记及心得 #### 描述:Core Java 学习笔记及心得 pdf格式可打开。涵盖了java的基础入门知识,非常适合自学的及想深入学习理解的同学。 #### 标签:...
JAVA学习笔记 JAVA学习笔记是面向对象编程语言的学习笔记,涵盖了JAVA的基本概念、面向对象编程思想、类和对象的概念、实例变量和局部变量的区别、方法的定义和调用、类型转换、精度问题、移位问题、switch语句的...
"Java学习笔记" 本资源是一个关于Java编程语言的学习笔记,涵盖了Java的基础知识、语法、数据类型、变量、类型转换等方面的内容。 标题:"java学习笔记.pdf" 描述:"想自学的小伙伴可以看俺" 标签:"Java" 部分...
本篇“Java学习笔记电子书”显然是一份详尽的资源,旨在帮助新手逐步掌握这门语言。 首先,我们要了解Java中的对象和类。在Java中,一切皆为对象,这是面向对象编程的核心理念。对象是类的实例,类则是对象的蓝图或...
林信良学习笔记(内容):ajax学习笔记,算法学习笔记,计算机图形学,C++学习笔记,设计模式,Hibernate学习笔记,Java学习笔记,JSF,JSP/Servlet,JUnit,Spring,Struts等
这份"Java学习笔记PPT"是针对Java2版本的学习资源,旨在帮助初学者或有一定基础的开发者深入理解Java的核心概念和应用。 在Java学习的初期,掌握基本语法是至关重要的。Java的语法与C++有诸多相似之处,但更加强调...
### 韩顺平编写的Java学习笔记概览 #### Java平台分类与运行机制 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版Java开发平台,适用于桌面应用程序开发。 - **J2EE(Java 2 Platform, Enterprise ...
### 瑜琅Java学习笔记概览 瑜琅的Java学习笔记涵盖了Java的基础概念与核心特性,从起源到高级特性均有涉及。以下是对该学习笔记各部分的深入解析: #### 1. Java起源 ##### 1.1 发展背景 - Java的诞生源于Sun ...