【Java】字符串处理 —— String、StringBuffer 与 StringBuilder

news/2024/9/28 5:11:36/

由于String类是final类型的,所以使用String定义的字符串是一个常量,因此它一旦创建,其内容和长度是不可改变的。如果需要对一个字符串进行修改,则只能创建新的字符串。为了便于对字符串进行修改,在JDK中提供了一个StringBuffer类(也称字符串缓冲区)来操作字符串。

String类的初始化

表1 String类的常用构造方法

方法声明

功能描述

String()

创建一个内容为空的字符串

String(String value)

根据指定的字符串内容创建对象

String(char[] value)

根据指定的字符数组创建对象

String类的常见操作

表1 String类的常用方法

方法声明

功能描述

int indexOf(int ch)

返回指定字符在此字符串中第一次出现处的索引

int lastIndexOf(int ch)

返回指定字符在此字符串中最后一次出现处的索引

int indexOf(String str)

返回指定子字符串在此字符串中第一次出现处的索引

int lastIndexOf(String str)

返回指定子字符串在此字符串中最后一次出现处的索引

char charAt(int index)

返回字符串中index位置上的字符,其中index的取值范围是:0~(字符串长度-1)

boolean endsWith(String suffix)

判断此字符串是否以指定的字符串结尾

int length()

返回此字符串的长度

boolean equals(Object anObject)

将此字符串与指定的字符串比较

boolean isEmpty()

当且仅当字符串长度为0时返回true

boolean startsWith(String prefix)

判断此字符串是否以指定的字符串开始

boolean contains(CharSequence cs)

判断此字符串中是否包含指定的字符序列

String toLowerCase()

使用默认语言环境的规则将String中的所有字符都转换为小写

String toUpperCase()

使用默认语言环境的规则将String中的所有字符都转换为大写

static String valueOf(int i)

返回 int 参数的字符串表示形式

char[] toCharArray()

将此字符串转换为一个字符数组

String replace(CharSequence oldstr, CharSequence newstr)

返回一个新的字符串,它是通过用newstr替换此字符串中出现的所有oldstr得到的

String[] split(String regex)

根据参数regex(regex是一个正则表达式,用来限定分隔规则)将字符串分割为若干个子字符串

String substring(int beginIndex)

返回一个新字符串,它包含从指定的beginIndex起始角标处开始,直到此字符串末尾的所有字符

String substring(int beginIndex, int endIndex)

返回一个新字符串,它包含从指定的beginIndex起始角标处开始,直到索引endIndex-1角标处的所有字符

String trim()

返回一个新字符串,它去除了原字符串首尾的空格

1.字符串的基本操作

java">public class Example02 {public static void main(String[] args) {String s = "abcabcbacdba"; // 初始化字符串System.out.println("字符串的长度为:" + s.length());System.out.println("字符串中第一个字符:" + s.charAt(0));System.out.println("字符c第一次出现的位置:" + s.indexOf('c'));System.out.println("字符c最后一次出现的位置:" + s.lastIndexOf('c'));System.out.println("子字符串第一次出现的位置:" + s.indexOf("ab"));System.out.println("子字符串最后一次出现的位置:" + s.lastIndexOf("ab"));}}

 2.字符串的转换操作

java">public class Example03 {public static void main(String[] args) {String str = "java"; char[] charArray = str.toCharArray(); // 字符串转换为字符数组System.out.print("将字符串转为字符数组后的遍历结果:");for (int i = 0; i < charArray.length; i++) {if (i != charArray.length - 1) {// 如果不是数组的最后一个元素,在元素后面加逗号System.out.print(charArray[i] + ",");} else {// 数组的最后一个元素后面不加逗号System.out.println(charArray[i]);}}System.out.println("将int值转换为String类型之后的结果:"  + String.valueOf(12));System.out.println("将字符串转换成大写之后的结果:"  + str.toUpperCase());}}

 3.字符串的替换和去除空格操作

java">    public class Example04 {public static void main(String[] args) {String s = "     http :// localhost : 8080     ";// 字符串去除空格操作System.out.println("去除字符串两端空格后的结果:" + s.trim());// 字符串替换操作System.out.println("去除字符串中所有空格后的结果:" + s.replace(" ", ""));}}

4.字符串的判断操作

java">    public class Example05 {public static void main(String[] args) {String s1 = " Starter"; // 声明一个字符串String s2 = "St";System.out.println("判断是否以字符串St开头:" + s1.startsWith("St"));System.out.println("判断是否以字符串er结尾:" + s1.endsWith("er"));System.out.println("判断是否包含字符串ar:" + s1.contains("ar"));System.out.println("判断字符串是否为空:" + s1.isEmpty());System.out.println("判断两个字符串是否相等" + s1.equals(s2));}}

在程序中可以通过“==”和equals()两种方式对字符串进行比较,但这两种方式有显著的区别。equals()方法用于比较两个字符串中的字符值是否相等,“==”方式用于比较两个字符串对象的内存地址是否相同。

5.字符串的截取和分割 

java">    public class Example06 {public static void main(String[] args) {String str = "2018-01-24";// 下面是字符串截取操作System.out.println("从第6个字符截取到末尾的结果:" + str.substring(5));System.out.println("从第6个字符截取到第7个字符的结果:" +str.substring(5, 7));// 下面是字符串分割操作System.out.print("分割后的字符串数组中的元素依次为:");// 通过横线连接符“—”将字符串转换为字符串数组String[] strArray = str.split("-");// 循环输出数组中的元素for (int i = 0; i < strArray.length; i++) {if (i != strArray.length - 1) {// 如果不是数组的最后一个元素,在元素后面加顿号System.out.print(strArray[i] + "、");} else {// 数组的最后一个元素后面不加顿号System.out.println(strArray[i]);}}}}

 

StringBuffer类

StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的。StringBuffer类似一个字符容器,当在其中添加或删除字符时,所操作的都是这个字符容器,因此并不会产生新的StringBuffer对象。

表1 StringBuffer类常用方法

方法声明

功能描述

StringBuffer append(char c)

添加字符到StringBuffer对象中末尾

StringBuffer insert(int offset,String str)

在StringBuffer对象中的offset位置插入字符串str

StringBuffer deleteCharAt(int index)

移除StringBuffer对象中指定位置的字符

StringBuffer delete(int start,int end)

删除StringBuffer对象中指定范围的字符或字符串

StringBuffer replace(int start,int end,String s)

将StringBuffer对象中指定范围的字符或字符串用新的字符串s进行替换

void setCharAt(int index, char ch)

修改指定位置index处的字符

String toString()

返回StringBuffer缓冲区中的字符串对象

StringBuffer reverse()

将此StringBuffer对象用其反转形式取代

StringBuffer类和String类有很多相似之处,初学者在使用时很容易混淆。接下来针对这两个类进行对比,简单归纳一下两者的不同,具体如下:

①String类定义的字符串是常量,一旦创建后,内容和长度都是无法改变的。StringBuffer表示字符容器,其内容和长度可以随时修改。在操作字符串时,如果该字符串仅用于表示数据类型,则使用String类即可,但是如果需要对字符串中的字符进行增删操作,则使用StringBuffer类。

②String类重写了Object类的equals()方法,而StringBuffer类没有重写Object类的equals()方法。

StringBuilder的使用

除了使用StringBuffer外,JDK 1.5之后提供了一个StringBuilder类同样可以操作字符串。StringBuilder与StringBuffer的功能相似,且两个类中所提供的方法也基本相同。二者所不同的是StringBuffer是线程安全的,而StringBuilder没有实现线程安全功能,所以性能略高。通常情况下,如果创建一个内容可变的字符串对象,应该优先考虑StringBuilder类。

StringBuilder类同样提供了一系列的追加(append)、插入(insert)、替换(replace)和删除(delete)的方法。如果将文件1中的StringBuffer换成StringBuilder,程序同样可以正确执行。


http://www.ppmy.cn/news/1531004.html

相关文章

5步了解 地理处理合成孔径雷达工具集

摘要: 本文将带大家了解 ArcGIS Pro 合成孔径雷达工具集中的所有地理处理工具。有了 Image Analyst 许可证,就可以访问 Image Analyst 工具箱中的此工具集。此工具集是锦上添花,它使处理 SAR Ground Range Detect... 本文将带大家了解 ArcGIS Pro 合成孔径雷达工具集中的所有…

安装镜像烧录软件Etcher

一、下载Etcher安装包 访问官方网站&#xff1a; 打开浏览器&#xff0c;访问Etcher的官方网站https://etcher.balena.io/#download-etcher 下载安装包&#xff1a; 在官方网站找到Etcher的下载链接。 点击下载链接 二、安装Etcher 命令安装 点击下载链接会跳转至以下界面…

Vue 响应式监听 Watch 最佳实践

一. 前言 上一篇文章我们学习了 watch 的基础知识&#xff0c;了解了它的基本使用方法及注意事项&#xff0c;本篇文章我们继续了解在Vue 中 响应式监听 watch 的妙用。了解 watch 的基础使用请参考上一篇文章&#xff1a; 详解 Vue 中 Watch 的使用方法及注意事项https://bl…

《深度学习》—— ResNet 残差神经网络

文章目录 一、什么是ResNet&#xff1f;二、残差结构&#xff08;Residual Structure&#xff09;三、Batch Normalization&#xff08;BN----批归一化&#xff09; 一、什么是ResNet&#xff1f; ResNet 网络是在 2015年 由微软实验室中的何凯明等几位大神提出&#xff0c;斩获…

Ubuntu下简易安装openjdk8的命令行

1. 搜索 openjdk sudo apt search openjdk2. 在搜索结果中&#xff0c;选择带有jdk名字的进行安装 sudo apt install openjdk-8-jdk3. 安装成功 java -version

NLP 序列标注任务核心梳理

句向量标注 用 bert 生成句向量用 lstm 或 bert 承接 bert 的输出&#xff0c;保证模型可以学习到内容的连续性。此时 lstm 输入形状为&#xff1a; pooled_output.unsqueeze(0) (1, num_sentence, vector_size) 应用场景 词性标注句法分析 文本加标点 相当于粗粒度的分词任…

【初阶数据结构】详解二叉树 - 树和二叉树(三)(递归的魅力时刻)

文章目录 前言1. 二叉树链式结构的意义2. 手搓一棵二叉树3. 二叉树的遍历&#xff08;重要&#xff09;3.1 遍历的规则3.2 先序遍历3.3 中序遍历3.4 后序遍历3.5 遍历的代码实现3.5.1 先序遍历代码实现3.5.2 中序遍历代码实现3.5.3 后序遍历代码实现 4. 统计二叉树结点的个数5.…

LeaferJS 动画、状态、过渡、游戏框架

LeaferJS 现阶段依然专注于绘图、交互和图形编辑场景。我们引入游戏场景&#xff0c;只是希望让 LeaferJS 被更多有需要的人看到&#xff0c;以充分发挥它的价值 LeaferJS 为你带来了全新的游戏、动画、状态和过渡功能&#xff0c;助你实现那些年少时的游戏梦想。我们引入了丰富…