String StringBuilder常用方法总结

news/2023/12/4 20:45:25

在java中String类不可变的,创建一个String对象后不能更改它的值。所以如果需要对原字符串进行一些改动操作,就需要用StringBuilder类或者StringBuffer类,StringBuilder比StringBuffer更快一些,缺点是StringBuilder不是线程安全的,但在算法竞赛中一般我们用不到多线程。所以,主要推荐使用StringBuilder类。

当需要单独对字符串中的某个字符进行操作时,我们可以将其转换成字符数组或者转换其为StringBuilder字符
注意字符串和字符数组的转换

        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);

String

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

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

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

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

StringBuilder

StringBuilder一个可变的字符序列。

在 Java 字符串的学习中,我们知道了字符串具有不可变性,当频繁操作字符串时候,会在常量池中产生很多无用的数据

而 StringBuilder 与 String 不同,它具有可变性。相较 String 类不会产生大量无用数据,性能上会大大提高。

因此对于需要频繁操作字符串的场景,建议使用 Stringbuilder 类来代替 String 类。

构造方法

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

StringBuilder();//构建一个空的可变字符串。
StringBuilder(String str);//构建一个值为str的可变字符串。
StringBuilder s = new StringBuilder();//
StringBuilder s1 = new StringBuilder("123456");//123456System.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输出: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输出:
23
46

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

相关文章

JAVA面试-语法基础- A01

语法基础 面向对象封装继承多态 面向对象 面向对象特性 封装 利用抽象数据类型将数据和基于数据的操作封装在一起&#xff0c;使其构成一个不可分隔的独立实体&#xff0c;数据被保护在抽象数据类型的内部&#xff0c;尽可能的隐藏内部的细节&#xff0c;只保留一些对外的接口…

前端通信-服务端发送事件: SSE(Server-Sent Events)

在日常开发中&#xff0c;我们经常会遇到需要实时获取数据的情况&#xff0c;之前实现这种相似的功能通常都是用ajax长轮询&#xff0c;在HTML5规范中定义了新的通信方式&#xff0c;WebSocket和SSE。websocket相对SSE更常用一些&#xff0c;本文着重来介绍SSE的应用。 SSE AP…

滨州申请专利需要准备哪些材料?

如果你想保护你的一些发明和设计&#xff0c;你可以申请专利。申请专利时&#xff0c;需要提前了解程序和相关流程。那么&#xff0c;申请专利需要准备哪些材料呢&#xff1f;让我们一起仔细看看。 首先&#xff0c;申请专利需要准备哪些材料&#xff1f; (1)外观专利&#xff…

C++学习 Day14

目录 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 1. 泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int&a…

德尔玛IPO首日破发,市值蒸发超4亿

今日&#xff08;5月18日&#xff09;&#xff0c;小米“代工厂”广东德尔玛科技股份有限公司&#xff08;下称“德尔玛”&#xff0c;301332.SZ&#xff09;正式在深交所挂牌上市。 德尔玛此次IPO募资净额为12.31亿元&#xff0c;开盘价为14.81元/股&#xff0c;与发行价持平…

【Linux内核解析-linux-5.14.10】文件系统知识点以及解答(建议收藏)

什么是Linux文件系统&#xff1f; 答&#xff1a;Linux文件系统是一种用于管理和组织计算机上数据的方法。它提供了一个层次结构&#xff0c;使用户能够轻松地访问他们的数据&#xff0c;并且支持对数据进行备份、恢复和保护。 Linux中有哪些常见的文件系统类型&#xff1f; 答…

使用 SpringBoot 访问 MySQL 数据库

一、目标 创建一个 MySQL 数据库&#xff0c;构建一个 Spring 应用程序&#xff0c;并将其连接到新创建的数据库。 二、准备工作 1、最喜欢的文本编辑器或 IDE 2、Java 17或更高版本 3、Gradle 7.5或Maven 3.5 三、初始化项目 1、 导航到https://start.spring.io。该服务…

HTTPTomcatServlet学习

HTTP&Tomcat 今日目标&#xff1a; 了解JavaWeb开发的技术栈理解HTTP协议和HTTP请求与响应数据的格式掌握Tomcat的使用掌握在IDEA中使用Tomcat插件理解Servlet的执行流程和生命周期掌握Servlet的使用和相关配置 1. Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网&…

freeswitch的2833和inband对接方案

概述 freeswitch支持三种模式的DTMF传输方式&#xff0c;分别时inband、INFO、2833。 在传统的PSTN网络中&#xff0c;所有的DTMF码都是inband模式&#xff0c;所以VOIP网络和PSTN网络对接中&#xff0c;需要将DTMF码做格式转换&#xff0c;通常是2833和inband之间的转换。 …

Makefile 简易教程

如果你是命令行重度使用者&#xff0c;学习 Makefile 将可以大大提高你的开发效率&#xff0c;下面简单介绍一下 Makefile 的知识和使用方式。 Makefile 是一种包含一组指令来编译和构建软件项目的文件。 Makefile 文件通常包含一组规则和依赖关系&#xff0c;以指定如何将源…

Netty核心组件模块(一)

1.Bootstrap和ServerBootstrap 1>.Bootstrap意思是引导,一个Netty应用通常由一个Bootstrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty中Bootstrap类是客户端程序的启动引导类,ServerBootstrap是服务端启动引导类; 2>.常见的方法有: ①.public ServerBootstr…

【笔试强训选择题】Day13.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录…

spring项目里的大事务优化

编程型事务更加灵活 声明式事务只需要加在方法头加Transactional注解即可开启事务&#xff0c;但是还是不太灵活&#xff0c;意味着整个方法所进行对数据库操作都要加进事务&#xff0c;当然一次查询也要进入事务&#xff0c;这并不是我们想要的&#xff0c;我们在update、ins…

SpringMVC 执行流程

视图阶段&#xff08;老旧JSP等) DispatcherServlet&#xff1a;接收请求、响应结果&#xff0c;所有的请求都要经过它&#xff0c;它是被Tomcat容器初始化的当这个类加载时会加载一些组件类HandlerMapping、HandlerAdapter、ViewResolver等等。 HandlerMapping&#xff1a;根…

mybatis-plus 自动填充的时间跟真实时间相差8小时

项目中 用到了以下两个字段,分别是插入数据时间和更新数据时间&#xff0c;用的mybatis-plus自动填充,结果发现填充的时间跟真实时间相差很多。查了一些资料&#xff0c;找到了解决方案&#xff1a; 1. 下图是我的mysql没有进行配置之前的时区配置,这里的CST包括了4个时区,分别…

泛型类和泛型类是并列的关系

package com.test.test05;import java.util.ArrayList;class Demo{public static void main(String[] args) {Object obj new Object();String s new String();obj s; //多态的一种形式Object[] objArr new Object[10];Object[] strArr new String[10];objArr st…

一种基于非均匀分簇和建立簇间路由的算法的无线传感器网络路由协议(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 本文准备了一种路由方法&#xff0c;该方法使传感器通过有效地使用能量将数据从发送方加载到接收器&#xff0c;因为它在 LEAC…

修为 - 人生感悟

人不为己&#xff0c;天诛地灭。 说明一下&#xff0c;上面说的为己&#xff0c;指的是人的修为。 一个人&#xff0c;在成年之后&#xff0c;需要不断的对自己进行修为的提高。在经历了世事之后&#xff0c;对人生的感悟要不断地进行总结&#xff0c;提高自己的修为。 老祖宗给…

基于ArcGIS实现陕西省1:250000比例尺地形图分幅和编号

1地形图的分幅与编号原理 我国1:1000000地形图的分幅采用国际1:1000000地图分幅标准&#xff0c;而其他比例尺地形图分幅以1:1000000比例尺地形图为基准进行分幅。每幅1:1000000地形图范围是经差6、纬差4&#xff1b;纬度60~ 76之间经差12、纬差4&#xff1b;纬度76~ 88之间经…

H5性能测试怎么做?这些关键指标你得搞清楚

目录 01、Http相关 02、组件是否压缩 03、图片格式和大小是否合适 04、CSS放在顶部 05、JS放在底部 06、JS &CSS压缩 07、是否添加缓存 08、避免非200返回值 09、使用CDN 03、WebView相关 学习资源分享 软件测试面试小程序 01、Http相关 01、Http请求个数 有…
最新文章