String字符串 StringBuilder之常用API

String字符串 && StringBuilder之常用API

字符串是JAVA语言中十分重要的数据结构,它拥有灵活的使用方法和封装好的的API,帮助开发者能够快速上手,这也是JAVA语言的独特之处。相应地,String类、StringBuilder等字符串的使用也是互联网大厂笔试面试、银行等国企面试的重要考察内容。

【预备知识】在java语言中String类不可变的,主要是两个方面:
1.String底层代码声明的类型为final;
2.String本质是通过字符数组char[]存储数据的,而该数组也是final修饰的。

  • 那么我们对字符串进行修改时,有两种思路:一是将其转换为字符串数组,二是将其转换为可变字符串数组。本文会介绍两种不同的方式,读者可以根据需要选择。

1.字符串和字符数组的转换

字符串转成字符数组:

        String str = "this is str";char[] ch = str.toCharArray();ch[0] = '1';String str2 = String.valueOf(ch);System.out.println(str2);

上述代码可以用来想要修改字符串中的某个字符。或者使用下文的StringBuilder的setCharAt(位置,字符值)方法,例如:

        String str = "this is str";StringBuilder sb = new StringBuilder(str);sb.setCharAt(0,'1');String str2 = sb.toString();System.out.println(str2);

2.String类常用的API

String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。

//String有两种遍历方式,第一种charAt()方法;第二种是先转化为字符数组,再挨个遍历
1 charAt(int i);//返回索引i处的字符
2 toCharArray();//返回此字符串的字符数组
3 length();//返回此字符串的长度
4 isEmpty();//判空 当length()为0时返回true//5.String的比较
compareTo(String anotherString)//按字典顺序比较两个字符串
compareToIgnoreCase(String anotherString)//按字典顺序且不区分大小写比较两个字符串
equals(String anotherString)//判断两个字符串是否相等,相等返回true否则返回false
equalsIgnoreCase(String str)//同上,不区分大小写。

【Tips】
compareTo()**和compareToIgnoreCase()方法的返回值:其实是返回a和b第一个不同字符ASCII的差值。例:a.compareTo(b)如果a > b 返回大于0的整数;如果a == b 返回0;如果a < b 返回小于0的整数

//6.String的搜索(某个字符可以通过下标int index来确定,某个子串的话参数为String)
indexOf(int ch);// 返回指定字符在此字符串中第一次出现的索引(找不到返回-1)
indexOf(int ch, int fromindex); // 同上, 从指定索引开始搜索
indexOf(String str);//返回子串在此字符串中第一次出现的索引
indexOf(String str, int fromindex);同上,从指定索引开始搜索//7.最后一次出现的索引
lastIndexOf(int ch);//返回指定字符在此字符串最后一次出现的索引
lastIndexOf(int ch, int fromindex);//同上, 从指定索引开始搜索
lastIndexOf(String str);//返回子串在此字符串最后一次出现的索引
lastIndexOf(String str, int fromindex);//同上, 从指定索引开始搜索//8.判断前缀
startsWith(String prefix);// 检查是否以某一前缀开始(返回true,或者false)//9.字符串拆分
split(String regex); // 根据正则表达式拆分//10.提取子字符串
substring(int beginIndex, int endIndex)//返回从begin开始到end-1结束的子串
toUpperCase(); //将此字符串中的所有字母都换为大写
toLowerCase()//将此字符串中的所有字母都换为小写

3.StringBuilder

提到可变长字符序列,会想到StringBuilder类或者StringBuffer类。但往往我们会使用前者,原因是StringBuilder比StringBuffer更快一些,缺点是StringBuilder不是线程安全的,但在算法竞赛中一般我们用不到多线程。所以,本文主要介绍StringBuilder类。

在 Java 字符串的学习中,我们知道了字符串具有不可变性,当频繁操作字符串时候,会在常量池中产生很多无用的数据。而 StringBuilder 与 String 不同,它具有可变性。相较 String 类不会产生大量无用数据,性能上会大大提高。

因此对于需要频繁操作字符串的场景,建议使用 Stringbuilder 类来代替 String 类,构造方法如下:

//构造一个空字符串生成器,初始容量为 16 个字符;
StringBuilder() 
//构造一个空字符串生成器,初始容量由参数 capacity 指定;
StringBuilder(int catpacity) 
//构造一个字符串生成器,该生成器包含与指定的 CharSequence 相同的字符。;
StringBuilder(CharSequence seq) 
//构造初始化为指定字符串内容的字符串生成器。
StringBuilder(String str) 

创建

//StringBuilder();构建一个空的可变字符串。
//StringBuilder(String str);构建一个值为str的可变字符串。
StringBuilder s = new StringBuilder();//
StringBuilder s1 = new StringBuilder("123456");//123456
System.out.println(s); //可以直接输出**字符串反转**
//reverse();
System.out.println(s.reverse()); 

遍历:

charAt(int i);// 返回索引i位置的字符
length();//返回此字符串的长度StringBuilder s = new StringBuilder("123");
for(int i = 0; i < s.length(); i++)System.out.println(s.charAt(i)+" ");// 1 2 3输出:123

1.字符串连接

//append(String str);在此字符串追加str。
//append(StringBuilder str);在此字符串追加str。
//append(char[] str, int offset, int len);将char的子数组追加到此字符串StringBuilder s = new StringBuilder("123");
StringBuilder s1 = new StringBuilder("456");
s.append(s1);
System.out.print(s);// 123456

2.获取容量

 int capacity() 方法来获取当前容量,容量指定是可以存储的字符数(包含已写入字符),超过此数将进行自动分配。

3. 替换字符串中的字符

setCharAt(int index, char ch);//将指定索引处的字符替换为ch

4.字符串截取

substring(int start);//返回此字符串从start开始至length-1结束的String
substring(int start, int end);//返回此字符串从start开始至end-1结束的String
toString();//返回此序列中的String表示形式。
(注意以上方法的返回值都是String而不是StringBuilder)

5.查找

indexOf(String str);//返回子字符串第一次出现的索引
indexOf(String str, int fromIndex);//同上,从指定位置查找lastIndexOf(String str);//返回子字符串最后一次出现的索引
lastIndexOf(String str, int fromIndex);//同上,从指定位置查找

6.删除

delete(int start, int end);//移除此序列从start到end-1的字符串
deleteCharAt(int index);//移除指定索引上的charStringBuilder s = new StringBuilder("123");StringBuilder s1 = new StringBuilder("456");s.delete(0, 1);s1.deleteCharAt(1); System.out.println(s);// 23System.out.println(s1);// 46

参考链接:
https://blog.csdn.net/qq_45714272/article/details/119889613
https://blog.csdn.net/weixin_47174945/article/details/115608403

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1556747.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

谁喝酒 1.3.0 | 这款聚会游戏完全免费,无需注册登录,简洁易用。

适合聚会时玩的游戏APP&#xff0c;完全免费&#xff0c;无需注册登录。 大小&#xff1a;36M 百度网盘&#xff1a;https://pan.baidu.com/s/1nkUi4W3UhMyEsnAiSoOP9g?pwdolxt 夸克网盘&#xff1a;https://pan.quark.cn/s/239397c0c894 移动网盘&#xff1a;https://caiyun…

【英语】4. 熟词僻义

文章目录 前言e.g.总结参考文献 前言 进行英语前后缀的复习 e.g. spell: 咒语 时期want: povertyaddress: 强调&#xff0c;地址&#xff0c;演讲bear: stand, endureblow: blast &#xff0c;冲击chair: 主席的位置 &#xff0c;掌管 chair a company fuel: add 燃料&#x…

融乐·Music 1.1.3 | 专为音乐爱好者打造,海量免费音乐资源

融乐Music提供了海量免费音乐资源&#xff0c;满足各种类型的音乐需求。界面简洁&#xff0c;操作方便&#xff0c;支持在线播放和离线下载。 大小&#xff1a;13.6M 百度网盘&#xff1a;https://pan.baidu.com/s/1AVKX747bvteAcO__3o1KCQ?pwdolxt 夸克网盘&#xff1a;http…

【含开题报告+文档+PPT+源码】基于SSM框架的线上交易商城的设计与实现

开题报告 随着互联网的快速发展&#xff0c;电子商务成为了现代化社会中不可或缺的一部分。线上交易平台的兴起&#xff0c;为商家和消费者创造了更多的交易机会和便利。然而&#xff0c;传统的电商平台通常由一家中央机构管理和控制&#xff0c;对商家和消费者的自由度有一定…

JWT集成Keycloak

一、直接使用现有域账号、密码获取token方式 1.KeyClack 使用现有配置 Client id : account-console 2.服务配置文件配置 3.API接口配置 4. 获取token 5.调用方式&#xff08;Swagger&#xff09;(代码方式直接在请求头加上token) 5.1 配置在Swagger访问 5.2 访问需要认证的接…

【JavaEE初阶】深入理解线程池的概念以及Java标准库提供的方法参数分析

前言 &#x1f31f;&#x1f31f;本期讲解关于MySQL索引事务&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;【JavaEE初阶】多线程案列之定时器的使用和内部原码模拟-CSDN博客 &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl…

Python酷库之旅-第三方库Pandas(134)

目录 一、用法精讲 601、pandas.DataFrame.plot.pie方法 601-1、语法 601-2、参数 601-3、功能 601-4、返回值 601-5、说明 601-6、用法 601-6-1、数据准备 601-6-2、代码示例 601-6-3、结果输出 602、pandas.DataFrame.plot.scatter方法 602-1、语法 602-2、参数…

【C++】入门基础介绍(下)输入输出,函数重载,缺省与引用

文章目录 7. C输入与输出8. 缺省参数9. 函数重载10. 引用10. 1 引用的概念10. 2 引用的特性10. 3 引用的使用10. 4 const引用10. 5 指针和引用的关系 11. inline12. nullptr 7. C输入与输出 iostream是 Input Output Stream 的缩写&#xff0c;是标准输入、输出流库&#xff0…

BFS解决最短路问题_最小基因变化、单词接龙_C++

BFS解决最短路问题_最小基因变化、单词接龙_C 1. 题目解析2. 算法分析3. 代码实现4. 举一反三&#xff1a;单词接龙 1. 题目解析 leetcode链接&#xff1a;https://leetcode.cn/problems/minimum-genetic-mutation/submissions/569463000/ 基因序列可以表示为一条由 8 个字符组…

【计算机网络】面试必问TCP十大机制

1. TCP协议的报文格式 说明&#xff1a; TCP 报文格式主要分为两部分&#xff1a;TCP 报文头部和数据部分。以下是对各字段的详细解释&#xff1a; TCP 报文头部 源/目的端口&#xff1a;各占用16位。表示数据从哪个进程发送&#xff0c;发送到哪个进程去。序号字段&#xff1a…

千古风流人物 陆游

简介 陆游&#xff08;1125年-1210年&#xff09;&#xff0c;字务观&#xff0c;号放翁&#xff0c;越州山阴&#xff08;今浙江绍兴&#xff09;人&#xff0c;南宋诗人、词人。后人每以陆游为南宋诗人之冠。是中国南宋时期的著名文学家、词人、政治家和军事家。 陆游出生在…

基于SpringBoot+Vue+MySQL的药品信息管理系统

系统展示 管理员界面 医生界面 员工界面 系统背景 随着医疗技术的不断提升&#xff0c;药品在治疗疾病中扮演着越来越重要的角色。传统的药品管理方式以人工方式为主&#xff0c;但人工管理难以满足现代社会快速发展的需求。因此&#xff0c;需要一种更加高效、便捷的信息化管理…

FLORR.IO画廊(2)

指南针&#xff08;超级&#xff09; 是Florr.io的一种辅助花瓣&#xff0c;用于指示超级生物的位置。 基础&#xff08;超级&#xff09; 是florr.io的一种攻击型花瓣&#xff0c;玩家在初次游玩时即获得5个基本&#xff0c;个数不随着等级改变而改变&#xff0c;基本不可合成…

C++之模版进阶篇

目录 前言 1.非类型模版参数 2.模版的特化 2.1概念 2.2函数模版特化 2.3 类模板特化 2.3.1 全特化和偏特化 2.3.2类模版特化应用实例 3.模版分离编译 3.1 什么是分离编译 3.2 模板的分离编译 3.3 解决方法 4. 模板总结 结束语 前言 在模版初阶我们学习了函数模版和类…

erlang学习:Linux命令学习9

sed命令介绍 sed全称是&#xff1a;Stream EDitor&#xff08;流编辑器&#xff09; Linux sed 命令是利用脚本来处理文本文件&#xff0c;sed 可依照脚本的指令来处理、编辑文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等 sed 的运行…

四川全寄宿自闭症学校专业团队详解

在广州市的一隅&#xff0c;有一所名为星贝育园的特殊教育学校&#xff0c;它远离城市的喧嚣与纷扰&#xff0c;为自闭症儿童提供了一个宁静、安全的学习与生活环境。这所学校致力于通过全方位的教育和照顾&#xff0c;帮助自闭症儿童在这个充满挑战的世界中寻找到属于自己的快…

【C++】—— 继承(上)

【C】—— 继承&#xff08;上&#xff09; 1 继承的概念与定义1.1 继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承父类成员访问方式的变化 1.3 继承类模板 2 父类和子类对象赋值兼容转换3 继承中的作用域3.1 隐藏规则3.2 例题 4 子类的默认成员函数4.1 构造函数4.1.1 父类有…

Oracle 11g RAC 节点异常重启问题分析

一、背景 在国庆期间巡检的时候&#xff0c;发现数据库alert日志中出现了异常重启的信息&#xff0c;当即对该报错进行分析处理。 二、处理过程 &#xff08;1&#xff09;数据库告警日志分析 node1 alert&#xff1a; Sat Oct 05 13:05:14 2024 Thread 1 advanced to log …

【光追模组】使命召唤7黑色行动光追mod,调色并修改光影,并且支持光追效果,游戏画质大提升

大家好&#xff0c;今天小编我给大家继续引入一款游戏mod&#xff0c;这次这个模组主要是针对使命召唤7黑色行动进行修改&#xff0c;如果你觉得游戏本身光影有缺陷&#xff0c;觉得游戏色彩有点失真的话&#xff0c;或者说你想让使命召唤7这款游戏增加对光线追踪的支持的话&am…