当前位置: 首页 > news >正文

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

由于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.字符串的基本操作

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.字符串的转换操作

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.字符串的替换和去除空格操作

    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.字符串的判断操作

    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.字符串的截取和分割 

    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.mrgr.cn/news/36992.html

相关文章:

  • 找到你的工具!5款免费可视化报表工具对比分析
  • 什么是 Servlet? 它的主要用途是什么?
  • 行情叠加量化,占据市场先机!
  • WAF,全称Web Application Firewall,好用WAF推荐
  • UGUI动态元素大小的滑动无限列表
  • 哈希表(一)
  • 【Python语言初识(五)】
  • 828华为云征文|使用Flexus X实例安装宝塔面板教学
  • (二)Optional
  • 数据结构编程实践20讲(Python版)—02链表
  • Shell脚本基础——实训项目任务
  • 超详细的 pytest教程 之前后置方法和 fixture 机制
  • 【C++】入门基础知识-1
  • 如何从huggingface下载
  • 循环神经网络笔记
  • linux常用命令(cheng)
  • C++学习笔记(45)
  • C++(string字符串、函数)
  • 【Linux】Linux工具——CMake入门
  • 【理解 Java 中的 for 循环】