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.

相关文章
|
3天前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
13 0
|
1天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
8 0
|
1天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
8 0
|
3天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
20 9
|
3天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
8 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
4天前
|
存储 安全 Java
java多线程之原子操作类
java多线程之原子操作类
|
Java
Java---StringBuffer()方法的简单应用
Java---StringBuffer()方法的简单应用
112 0
|
Java
Java---StringBuffer()方法的简单应用
描述:在实际应用中,经常回遇到对字符串进行动态修改。这时候,String类的功能受到限制,而StringBuffer类可以完成字符串的动态添加、插入和替换等操作。 1、构造函数。
693 0
|
4天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
4天前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第9天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细解析Java中的同步机制,包括synchronized关键字、Lock接口以及并发集合等,并探讨它们如何影响程序的性能。此外,我们还将讨论Java内存模型,以及它如何影响并发程序的行为。最后,我们将提供一些实用的并发编程技巧和最佳实践,帮助开发者编写出既线程安全又高效的Java程序。
17 3