广告
返回顶部
首页 > 资讯 > 后端开发 > Python >JAVA基础类库之String类,StringBuffer类和StringBuilder类
  • 819
分享到

JAVA基础类库之String类,StringBuffer类和StringBuilder类

2024-04-02 19:04:59 819人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录引言String类String类构造方法 String常用方法:简单介绍的方法详细介绍的方法StringBuffer/StringBuilder常用方法StringBu

引言

字符串就是一连串的字符序列,Java提供了String、StringBuffer和StringBuilder三个类来封装对字符串,并提供了系列方法来操作字符串对象。

  • String类是不可变类的;
  • StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append、insert、reverse、setCharAt、setLength等方法可以改变这个字符串对象的字符序列;一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString方法将其转换为一个String对象,使其不可变;
  • jdk1.5又新增了一个StringBuilder类,它也代表了字符串对象,StringBuffer和StringBuilder基本相同,构造器和方法也一样,不同点是:StringBuffer是线程安全的,StringBuilder是线程不安全的,但是性能更高;所以通常情况下,创建一个内容可变的字符串,应优先选择StringBuilder类;

下面分别介绍一下这三种字符串类的一些常用方法(StringBuffer和StringBuilder方法基本相同,一起介绍了)

String类

这里还是简单说一下为什么String类不能修改吧;

简单来说,因为String类的使用频率太大了,为了进一步提高效率,String类所声明的字符串都会保存到常量池中,这样用哪个字符串直接取出来就可以了;

其实就记住不管怎样String类字符串就存放在常量池中;

举个例子:


String s1 = new String("Hello");
String s2 = "World" + s1;

能看出来创建了几个对象吗?

答案是三个;一个Hello,一个World,一个HelloWorld;先是Hello存放到了常量池中,然后World又进去,最后它俩组合形成新的字符串HelloWorld又放了进去;

如果理解不了,那么就记住一点:String类字符串一旦创建不可变。

String类构造方法 

  • String s = "abc";
  • String s = new String("abc");
  • String s = new String(byte数组);
  • String s = new String(byte数组, 起始下标, 长度);
  • String s = new String(char数组);
  • String s = new String(char数组, 起始下标, 长度);

记住这几种就可以了;

String常用方法:

简单介绍的方法

 length

作用:返回字符串长度

比较简单,就不详细介绍了,出现频率非常高

注意:数组里面的length是属性,这里的length()是方法;

isEmpty

作用:判断字符串是否为空字符串;

空字符串返回true,否则返回false

注意:判断的是空字符串""(即length()为0),而不是null,如果是null会造成空指针异常;

详细介绍的方法

 contians

作用:判断前面的字符串是否包含后面的字符串

格式:public boolean contains​(CharSequence s)

参数 :s - 搜索的顺序 (CharSequence是一个接口,String类已实现,所以可以传入一个字符串)

结果 :如果此字符串包含 s , 则为 true,否则为 false

例如:


System.out.println("HelloWorld".contains("World")); // 输出true
System.out.println("HelloWorld".contains("Java")); // 输出false

endsWith

作用:判断当前字符串是否以某个字符串结尾

格式:public boolean endsWith​(String suffix)

参数:suffix - 后缀

结果:如果当前字符串以suffix结尾,为true,否则为false

例如:


System.out.println("Java.txt".endsWith("Java")); // 输出false
System.out.println("Java.txt".endsWith(".txt")); // 输出true

startsWith

作用:判断当前字符串是否以某个字符串开始

格式:public boolean startsWith​(String suffix)

参数:suffix - 前缀

结果:如果当前字符串以suffix开始,为true,否则为false

例如:


System.out.println("Java.txt".startsWith("Java")); // 输出true
System.out.println("Java.txt".startsWith(".txt")); // 输出false

equalsIgnoreCase

作用:判断两个字符串是否相等,判断时忽略大小写

格式:public boolean equalsIgnoreCase​(String anotherString)

参数:anotherString - String

结果:如果两个字符串忽略大小写的情况下相等,返回true,否则为false

例如:


System.out.println("ABc".equalsIgnoreCase("abC")); // true
System.out.println("aABc".equalsIgnoreCase("abC")); // false

其实这个功能很常见,就比如我们输入验证码时有些情况就自动忽略了你输入字母的大小写;

getBytes

作用:将字符串对象转换为字节数组(字符对应的Ascii码数组)

格式:public byte[] getBytes​(String charsetName)

参数:charsetName - String

结果:返回一个byte[]数组,对应每个字符的Ascii码

例如:


byte[] b = "abcde".getBytes();
for (var i : b) System.out.print(i + " "); // 输出:97 98 99 100 101

indexOf

作用:返回某个字符串在当前字符串中第一次出现处的下标

格式:public int indexOf​(String str)

参数:str - 要搜索的子字符串

结果:返回指定子字符串的首次出现的索引,如果没有这种情况返回 -1

例如:


System.out.println("HelloWorld".indexOf("llo")); // 输出:2
System.out.println("HelloWorld".indexOf("ol")); // 输出:-1

lastIndexOf

作用:返回某个字符串在当前字符串中最后一次出现处的下标

格式:public int lastIndexOf(String str)

参数:str - 要搜索的子字符串

结果:返回指定子字符串的最后一次出现的索引,如果没有这种情况返回 -1

例如:


System.out.println("HelloWorld".lastIndexOf("l")); // 输出:8
System.out.println("HelloWorld".lastIndexOf("ol")); // 输出:-1

replace

作用:将某字符串与目标序列匹配的字符串替换为指定的字符串,替换从字符串开始到结束

格式:public String replace​(CharSequence target, CharSequence replacement)

参数:target - 要替换子串 replacement -指定的子符串

结果:生成的替换后的字符串

例如:


String s = "Hello World World".replace("World", "Java");
System.out.println(s);
// 输出:Hello Java Java

split

作用:将字符串拆分

格式:public String[] split​(String regex)

参数:regex - 分隔正则表达式 (同样可以通过字符串进行拆分,这里先用字符串作为案例)

结果:拆分后字符串存入的数组

例如:


String[] s = "year:2021-month:09-day:15-time:23:30".split("-"); // 以字符串"-"进行拆分;
for (var i : s) System.out.println(i);

substring(一个参数)

作用:返回一个字符串,该字符串是此字符串的子串; 子字符串以指定索引beginIndex的字符开始,并扩展到此字符串的末尾;

格式:public String substring​(int beginIndex)

参数:beginIndex - 包含起始索引

结果:截取后的子字符串

例如:


String s = "Today is a Good day!";
System.out.println(s.substring(9));
// 输出:a good day!

substring(两个参数)

作用:返回一个字符串,该字符串是此字符串的子串;子串从指定的beginIndex开始,并扩展到索引号为endIndex - 1的字符 ;

格式:public String substring​(int beginIndex, int endIndex)

参数:beginIndex - 开始索引(包括) endIndex - 结束索引(不包括) // 左闭右开

结果:截取后的子字符串

例如:


String s = "Today is a good day!";
System.out.println(s.substring(9, 15));
// 输出:a good

toCharArray

作用:将字符串转化为一个字符串数组

格式:public char[] toCharArray​()

参数:无参数

结果:返回对应字符串的数组

例如:


char[] s = "Today is a good day!".toCharArray();
for (var i : s) System.out.print(i + " ");
// 输出:T o d a y   i s   a   g o o d   d a y !

toLowerCase

作用:将此String所有字符转换为小写,使用默认语言环境的规则

格式:public String toLowerCase​()

参数:无参数

结果:返回转为小写的字符串

例如:


System.out.println("HELLOWORLD".toLowerCase());
// 输出:helloworld

toUpperCase

作用:将此String所有字符转换为大写,使用默认语言环境的规则

格式:public String toUpperCase​()

参数:无参数

结果:返回转为大写的字符串

例如:


System.out.println("helloworld".toUpperCase());
// 输出:HELLOWORLD

trim

作用:去除字符串前后空格

格式:public String trim​()

参数:无

结果:返回去除空格后的字符串

例如:


System.out.println("    hello      world    ".trim());
// 输出:hello      world

有时候你要使用搜索引擎搜索时,如果前面多打了几个空格,并不影响结果;或者有的账号登录会忽略开始和结束的空格,都会用到这个方法;

valueOf

作用:将任何非字符串转化为字符串

格式:public static String valueOf​(一些变量)

参数:参数可以是int,double等基本数据类型,也可以是Object等引用数据类型

结果:返回转化后的字符串

例如:


System.out.println(String.valueOf(1234)); // 1234
System.out.println(String.valueOf(3.14159)); // 3.14159
System.out.println(String.valueOf(true)); // true
char[] s = new char[] {'a', 'b', 'c'};
System.out.println(String.valueOf(s)); // abc
System.out.println(String.valueOf(new Object())); // java.lang.Object@776ec8df

这里需要说一下,valueOf使用是非常广泛的;我们可以看到最后一个案例,输出一个对象:new Object(),结果是它的地址以及位置信息等,是不是和 toString() 方法特别像?其实当传入vauleOf一个对象时,vauleOf对应的源码里就调用了toString()方法,所以才会输出一样的结果;所以说,如果我们重写了toString方法,就会调用我们重写的toString,输出对应信息;

还有,当我们用 System.out.println()输出的时候,如果传入的是对象,系统会默认调用toString,这是什么原因?调用println源码可以发现,每一个重载版本的println都会调用valueOf,所以如果println传入一个对象的话,就会调用valueOf方法,因为valueOf方法中有toString方法,所以就默认调用了toString方法,将对象转化为字符串输出;

刚才说了一点:每一个重载版本的println都会调用valueOf,当然也包括了基本数据类型,就以boolean例,看看它的源码;

在这里插入图片描述

可以看到boolean的println会调用 valueOf 的,其实其他基本数据类型也差不多,传入println后都会调用 valueOf ,所以可以得出结论:println输出的总是一个字符串;

StringBuffer/StringBuilder常用方法

一些总结:

  • StringBuffer/StringBuilder可以看做可变长度字符串。
  • StringBuffer/StringBuilder初始化容量16.
  • StringBuffer是线程安全的。StringBuilder是非线程安全的。
  • 频繁进行字符串拼接不建议使用“+”,对运行效率有影响;

下面就以StringBuffer为例,StringBuilder也是一样;

StringBuffer类构造方法 

  • StringBuffer​()
  • StringBuffer​(int capacity指定初始化容量)
  • StringBuffer​(CharSequence seq)
  • StringBuffer​(String str) 

StringBuffer常用方法:

 append

作用:将传入的数据追加在字符串后面

格式:public StringBuffer append(可以是int,char,String等)

参数:int,char,String等

结果:组合后形成的新的字符串

capacity

作用:返回当前容量

格式:public int capacity​()

参数:无

结果:当前字符串的容量(和长度length()不同)

delete

作用:删除字符串从 start 起始索引到 end-1 终止索引间的字符串;

格式:public StringBuffer delete​(int start,int end)

参数:start - 开始索引 end - 结束索引(左闭右开)

结果:删除后的字符串

insert

作用:在字符串序列中插入对应数据

格式:public StringBuffer insert​(一些参数)

参数:一般第一个参数是插入位置int ,第二个是插入内容:可以是char[],String,还有基本数据类型等;

结果:插入后的字符串

replace

作用:替换指定位置的指定字符串

格式:public StringBuffer replace​(int start, int end,String str)

参数:start - 开始索引 end - 结束索引 (左闭右开)str - 将替换的字符串。

结果:替换后的新的字符串

总结

这里只是简单介绍了一下String类 、StringBuffer类和StringBuilder类,对它们的常用方法也是有了一个简单的介绍,但是这也是很少的一部分,只是混个眼熟;所以实际开发过程中要会用JDK api帮助文档,因为Java所有的方法和类你不可能全部都记住或者见过,所以一定要会用工具

对于一些方法很简单,可能会觉得没有必要,但是既然有这个方法,那么肯定是有存在意义的;在实际开发中,这些方法不仅能提高你代码的可读性,还会减少你的代码量,所以都要有了解;

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: JAVA基础类库之String类,StringBuffer类和StringBuilder类

本文链接: https://www.lsjlt.com/news/136432.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JAVA基础类库之String类,StringBuffer类和StringBuilder类
    目录引言String类String类构造方法 String常用方法:简单介绍的方法详细介绍的方法StringBuffer/StringBuilder常用方法StringBu...
    99+
    2022-11-12
  • Java StringBuffer和StringBuilder类
    Java StringBuffer和StringBuilder类当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类。http://www.iis7.com/b/wzjk/和String类不同的是,Str...
    99+
    2023-06-02
  • Java基础类库之StringBuffer类用法详解
    StringBuffer类 String类是在所有开发项目开发之中一定会使用的一个功能类,并且这个类拥有如下功能 每个字符串的常量都属于一个String类匿名对象,并且不能修改;St...
    99+
    2022-11-13
  • Java中String类、StringBuffer和StringBuilder怎么使用
    这篇文章主要介绍“Java中String类、StringBuffer和StringBuilder怎么使用”,在日常操作中,相信很多人在Java中String类、StringBuffer和StringBuilder怎么使用问题上存在疑惑,小编...
    99+
    2023-06-30
  • Java String类和StringBuffer类的区别介绍
     关于java的字符串处理我们一般使用String类和StringBuffer类 那么String类和StringBuffer类的区别在什么地方呢 1、String是不可变...
    99+
    2022-11-13
  • 【Java基础教程】(三十三)常用类库篇 · 第三讲:可变字符串支持类——解析 StringBuffer与 StringBuilder类~
    Java基础教程之常用类库 · StringBuffer与 StringBuilder类 1️⃣ StringBuffer类1.1 概念1.2 特征1.3 使用 2️⃣ StringBuilder类2.1 概念及特征2.2 使用...
    99+
    2023-08-17
    java jvm 开发语言 后端 程序人生
  • Java详细分析String类与StringBuffer和StringBuilder的使用方法
    目录String类基本概念String字符串的存储原理String类的常用构造方法String类中常用方法StringBuffer类StringBuilder类String类基本概念...
    99+
    2022-11-13
  • Java基础类学习之String详解
    目录1 String不可变性2 不可变的好处3 String+和StringBuilder效率差异4 String, StringBuffer and StringBuilder5 ...
    99+
    2022-12-27
    Java String类 Java String
  • string类和stringbuffer类的区别是什么
    String类和StringBuffer类的主要区别是可变性和线程安全性。1. 可变性:String类是不可变的,即一旦创建就不能被...
    99+
    2023-09-14
    string
  • java基础之string类的示例分析
    这篇文章主要为大家展示了“java基础之string类的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java基础之string类的示例分析”这篇文章吧。1、String类1.1两种对象...
    99+
    2023-06-20
  • Java基础类之ArrayUtils工具类详解
    目录1、引入pom依赖2、ArrayUtils中的方法:3、举例总结1、引入pom依赖 <!-- https://mvnrepository.com/artifact/o...
    99+
    2022-11-12
  • Java基础之包装类
    目录一、java的包装类二、Integer包装类2.1Integer类的基本介绍2.2Integer类的属性2.3 Integer类的构造器三、自动装箱和自动拆箱四、Int...
    99+
    2022-11-12
  • Java基础全面讲解StringBuffer类的使用
    目录StringBuffer类常用方法字符串连接指定位置添加内容字符串反转替换指定范围的内容字符串截取删除指定范围的字符串查找指定的内容是否存在String与StringBuffer...
    99+
    2022-11-13
  • Java基础之匿名内部类、包装类
    目录1、匿名内部类2、Object类简介2.1取得对象信息toString()2.2对象的比较equals()2.3Object接口引用数据类型3、包装类3.1装箱与拆箱3.2字符串...
    99+
    2022-11-12
  • Java之String类
    作者简介: zoro-1,目前大二,正在学习Java,数据结构等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 ...
    99+
    2023-09-20
    java 开发语言 程序人生 笔记
  • Java基础入门语法--String类
    目录一、定义方式二、内存三、字符串比较相等四、字符串常量池五、理解字符串不可变六、字符、字节、字符串七、字符串的常见操作八、StringBuffer 和 StringBuilder(...
    99+
    2022-11-12
  • Java基础之Object类详解
    object类的介绍 object是所有类的直接父类或者是间接父类,为什么这么说呢? 可以查询java8的API帮助文档: 可见在这样的一个类树中,所有的类的根还是Object类 ...
    99+
    2022-11-12
  • Java 基础——Scanner 类
    目录 1.概述2.使用举例2.1.从不同的输入源读取数据2.2.next() 和 nextLine() 的区别2.3.读取大小已知的一维数组2.4.读取大小未知的一维数组2.5.读取长度大小已...
    99+
    2023-09-06
    Java Scanner 输入输出
  • java 类基础(转)
    java 类基础(转)[@more@]类是Java 的核心和本质。它是Java 语言的基础,因为类定义了对象的本性。既然类是面向对象程序设计Java 语言的基础,因此,你想要在Java 程序中实现的每一个概念都必须封装在类以内。因为类是Ja...
    99+
    2023-06-03
  • Python基础之(八)类
    创建类 第一形式 # !/usr/bin/env python # coding=utf-8 class Person(object): #object表示继承自object类,Python3中可省略次内容 """ T...
    99+
    2023-01-31
    基础 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作