`
googlelc
  • 浏览: 56654 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java学习笔记(三十三)

 
阅读更多

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学习笔记.zip

    java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...

    java学习笔记1

    Java学习笔记1 Java学习笔记1是学习Java过程中的笔记,主要记录了Eclipse开发环境中的快捷键使用、编辑功能、查找和调试等知识点。 Eclipse快捷键 Eclipse中有许多快捷键,掌握这些快捷键可以大大提高开发效率。...

    Java 学习笔记Java学习笔记

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。

    (完整版)最全的java学习笔记(必看).pdf

    Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言:Java是一种面向对象的...

    java学习笔记java学习笔记java学习笔记java学习笔记

    java学习笔记

    Java学习笔记——良葛格

    "Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...

    JAVA学习笔记 林信良

    《JAVA学习笔记》是林信良先生的一部深入浅出的Java编程教程,旨在帮助初学者和有一定经验的开发者巩固和提升Java编程技能。这本书涵盖了Java语言的基础到高级概念,是一份宝贵的自学资料。 首先,从基础部分开始,...

    Java学习笔记(必看经典).pdf

    本知识点的标题为“Java学习笔记(必看经典)”,意味着所整理的内容是针对Java初学者的一系列核心概念和原理的总结。 首先,面向对象编程是Java语言的核心,它与传统的面向过程编程有显著的不同。面向对象编程强调的...

    java学习笔记markdown

    【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    JAVA个人学习笔记

    JAVA学习笔记 JAVA学习笔记是面向对象编程语言的学习笔记,涵盖了JAVA的基本概念、面向对象编程思想、类和对象的概念、实例变量和局部变量的区别、方法的定义和调用、类型转换、精度问题、移位问题、switch语句的...

    java学习笔记.pdf

    "Java学习笔记" 本资源是一个关于Java编程语言的学习笔记,涵盖了Java的基础知识、语法、数据类型、变量、类型转换等方面的内容。 标题:"java学习笔记.pdf" 描述:"想自学的小伙伴可以看俺" 标签:"Java" 部分...

    林信良java学习笔记

    林信良学习笔记(内容):ajax学习笔记,算法学习笔记,计算机图形学,C++学习笔记,设计模式,Hibernate学习笔记,Java学习笔记,JSF,JSP/Servlet,JUnit,Spring,Struts等

    韩顺平编写的java学习笔记(全)

    ### 韩顺平编写的Java学习笔记概览 #### Java平台分类与运行机制 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版Java开发平台,适用于桌面应用程序开发。 - **J2EE(Java 2 Platform, Enterprise ...

    Java学习笔记PPT

    这份"Java学习笔记PPT"是针对Java2版本的学习资源,旨在帮助初学者或有一定基础的开发者深入理解Java的核心概念和应用。 在Java学习的初期,掌握基本语法是至关重要的。Java的语法与C++有诸多相似之处,但更加强调...

    瑜琅java学习笔记

    ### 瑜琅Java学习笔记概览 瑜琅的Java学习笔记涵盖了Java的基础概念与核心特性,从起源到高级特性均有涉及。以下是对该学习笔记各部分的深入解析: #### 1. Java起源 ##### 1.1 发展背景 - Java的诞生源于Sun ...

Global site tag (gtag.js) - Google Analytics