Java String类(3):StringBulider和StringBuffer详解

简介: Java String类(3):StringBulider和StringBuffer详解

StringBuilder的介绍

由于String的不可更改的特性,为了方便字符串的修改,Java中又提供了StringBuilder和StringBuffer类。这两个类大部分功能是相同的,我来介绍一下StringBulider常用的一些方法。如果想要查询其它的方法,可以查询API。

方法 说明
StringBuffer append(String str)

在尾部追加,相当于String的+=,可以追加:boolean, char, char[],

double, float, int, long, Object, String, StringBuff的变量

char charAt(int index) 获取index位置的字符
int length() 获取字符串的长度
int capacity() 获取底层保存字符串空间总的大小

void ensureCapacity(int mininmumCapacity)参数:

该方法将所需最小容量作为参数

扩容
void setCharAt(int index, char ch) 将index位置的字符设置为ch
int indexOf(String str) 返回str第一次出现的位置
int indexOf(String str, int fromIndex) 从fromIndex位置开始查找str第一次出现的位置
int lastIndexOf(String str) 返回最后一次出现str的位置
int lastIndexOf(String str, int fromIndex) 从fromIndex位置开始寻找str最后出现的位置
StringBuffer insert(int offset, String str) 在offset的位置插入:八种基类类型&String类型&Object类型数据
StringBuffer deleteCharAt(int index) 删除index位置的字符
StringBuffer delete(int start, int end) 删除[start, end)之间的字符
StringBuffer replace(int start, int end, String str) 将[start, end)之间的字符置换为str
String substring(int start) 从start开始一直到末尾的字符以String的方式返回
String substring(int start, int end) 将[start, end)范围内的字符以String的方式返回
StringBuffer reverse() 反转字符串
String toString() 将所有的字符按照String的方式返回

下面举一个长点的例子来介绍一下部分方法:

 public static void main(String[] args) {
        StringBuilder sb1 = new StringBuilder("hello");
        StringBuilder sb2 = sb1;
 
        //追加:即尾插->字符,字符串,整型数字
        sb1.append(' '); //hello
        sb1.append("world"); //hello world
        sb1.append(123); //hello world123
        System.out.println(sb1);
        System.out.println(sb1 == sb2);//true
 
        System.out.println(sb1.charAt(0));//获得0字号位上的字符h
 
        System.out.println(sb1.length());//获取字符串的有效长度:14
 
        System.out.println(sb1.capacity());//获得底层数组的总大小
 
        sb1.setCharAt(0, 'H');//设置任意位置上的字符Hello world123
 
        sb1.insert(0, "Hello world!!!");//Hello world!!!Hello world123
        System.out.println(sb1);
 
        System.out.println(sb1.indexOf("Hello"));//获得Hello第一次出现的位置:0
        System.out.println(sb1.lastIndexOf("Hello"));//获得Hello最后一次出现的位置:14
 
        sb1.deleteCharAt(0);//删除首字符
        sb1.delete(0, 5);//删除[0,5)之间的字符
 
        String str = sb1.substring(0, 5);//截取[0,5)区间中的字符并以String类型返回
        System.out.println(str);
 
        sb1.reverse();//字符串逆转
        str = sb1.toString();//将StringBuffer的方式返回
        System.out.println(str);
    }

从上述例子可以看出:String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder内容可以修改。频繁使用字符串的情况下考虑使用StringBuilder.

注:String和StringBuilder类不能直接转换。如果想要互相转换,可以采用以下原则:

1.String变为StringBuilder:利用StringBuilder的构造方法或者append()方法

2.StringBuilder变为String:调用toString()方法

常见问题

1.String,StringBuffer,StringBuilder之间的区别:

(1)String的内容不可修改,StringBuffer和StringBuilder的内容可以修改

(2)StringBuffer和StringBuilder的大部分功能是相似的

(3)StringBuffer采用同步处理,属于线程安全操作(StringBuffer前面有synchronized关键字以保证线程安全);而StringBuilder未采用同步处理,属于线程不安全操作

(4)StringBuffer性能较差,StringBuilder性能较好

2.

相关文章
|
4天前
|
Java 索引
String字符串常用函数以及示例 JAVA基础
String字符串常用函数以及示例 JAVA基础
|
3天前
|
自然语言处理 Java API
Java 8的Stream API和Optional类:概念与实战应用
【5月更文挑战第17天】Java 8引入了许多重要的新特性,其中Stream API和Optional类是最引人注目的两个。这些特性不仅简化了集合操作,还提供了更好的方式来处理可能为空的情况,从而提高了代码的健壮性和可读性。
26 7
|
3天前
|
存储 安全 Java
Java中的这些String特性可能需要了解下
Java中的String特性你知道哪些?虽然String很常见,通过源码可以看到String的值传递、字符串表和不可变性。本文基于JDK17说明。
9 1
|
1天前
|
安全 Java 容器
Java一分钟之-并发编程:线程安全的集合类
【5月更文挑战第19天】Java提供线程安全集合类以解决并发环境中的数据一致性问题。例如,Vector是线程安全但效率低;可以使用Collections.synchronizedXxx将ArrayList或HashMap同步;ConcurrentHashMap是高效线程安全的映射;CopyOnWriteArrayList和CopyOnWriteArraySet适合读多写少场景;LinkedBlockingQueue是生产者-消费者模型中的线程安全队列。注意,过度同步可能影响性能,应尽量减少共享状态并利用并发工具类。
15 2
|
3天前
|
设计模式 算法 Java
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
|
5天前
|
Java
Java String 避免空指针的方法
Java String 避免空指针的方法
5 0
|
5天前
|
C语言 C++ 容器
C++ string类
C++ string类
9 0
|
5天前
|
Java 编译器 ice
【Java开发指南 | 第十五篇】Java Character 类、String 类
【Java开发指南 | 第十五篇】Java Character 类、String 类
24 1
|
3天前
|
存储 Java
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
|
5天前
|
安全 Java 编译器
Java中String、StringBuilder和StringBuffer的区别
Java中String、StringBuilder和StringBuffer的区别
10 1