二十五、常用API之String和StringBuilder

一、String类

Java 提供了 String 类来创建和操作字符串
String类就是:字符串类,java程序中的所有的字符串值”abc”都是该类的实例 、字符串是常量,值创建后不能更改

String 类包括的方法

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

常用的构造方法:

(1) String():创建一个新的String对象表示一个空的字符序列 ””

(2) String(String original):创建一个String对象,使其表示一个与参数相同的字符序列,新创建的字符串对象是该参数字符串的副本

(3) String(char[] value):将参数数组中的内容,转为字符串

(4) String(char[] value,int offset,int count): 从指定offset位置开始,向后count个元素转为字符串

(5) String(byte[] bytes):

(6) String(byte[] bytes,int offset,int count):

public class Demo01 {public static void main(String[] args) {//"abc"存储在常量池  是一个常量字符串 相同的字符串在常量池中只存储一份 s1中存储的是“abc”在常量池中的地址String s1 = "abc";String s2 = "abc";System.out.println(s1 == s2);//==比较的是地址值  trues1 = "bcd";//会改变“abc”本身吗 不会 字符串是不可以被改变的,是一个字符串常量//s1变的只是  s1这个引用中存储的常量地址变了System.out.println(s1 == s2);  //  输出falseString s3 = new String("abc");//new 开辟了新的空间,将常量池中的abc复制一份存储到new开辟的空间中//s3中记录的是new这块空间的地址System.out.println(s2 == s3);  //false//String类重写了equals方法比较的是字符串的内容是否相同System.out.println(s2.equals(s3)); //truechar[] cs = {'书','源','真','骚'};//通过String的构造方法可以将字符数组转为字符串String s4 = new String(cs);System.out.println(s4);  //书源真骚//还可以将字符数组的一部分,转为字符串
//        (4)String(char[] value,int offset,int count)://参数1:要转换的数组//参数2: 从哪个索引位置开始转换//参数3: 转换的个数//从索引2开始两个字符String s5 = new String(cs,2,2);System.out.println(s5);  //真骚byte[] b = {97,98,99,100};String s6 = new String(b);System.out.println(s6); //abcd//也可以像字符数组那样String s7 = new String(b,2,2);System.out.println(s7);//cd}
}

1、String类中的获取功能

1、length(): 获取字符串的长度(个数), 返回值 int

2、charAt(int index):,获取到指定index索引上的字符,返回值是char

3、subString(int beginIndex):截取字符串的一部分,返回一个新的字符串,从beginIndex索引开始到后面的所有的字符

4、subString(int beginIndex,int endIndex):从begin位置开始到end-1之间进行截取,形成一个新的字符串,含头不含尾

5、indexOf(String str):获取str第一次出现的索引位置,返回值是int,没有找到就返回-1

6、indexOf(String str,int fromIndex):从指定位置开始寻找,返回在指定位置后第一次索引,返回值为int,没有找到返回-1

public class Demo02 {public static void main(String[] args) {//获取字符个数String str = "今天天气没40度,7月3号大降温,好消息25度";System.out.println(str.length());//23//由字符个数,可以得到索引范围   0~length()-1  0~22//获取指定索引的字符System.out.println(str.charAt(1));for (int i = 0; i < str.length(); i++) {System.out.println(str.charAt(i));}String str2 = "好好学习,天天加班";//截取某一段字符串,subString(int begin) 从指定位置开始到字符串结束 返回一个新的字符串String substring = str2.substring(5);//截取到的返回一个新的System.out.println(substring);//天天加班//截取某一段字符串,从指定位置开始,到指定位置结束,含头不含尾String substring1 = str2.substring(5, 7);System.out.println(substring1);//天天//indexOf(String str) 返回参数字符串在调用者中的第一次出现的索引位置//美羊羊对着喜羊羊喊喊String s = "喜羊羊不要不要不要啊,快停下来";int index = s.indexOf("不要");System.out.println(index);//2//从指定位置开始 向后寻找int index2 = s.indexOf("不要", 3);System.out.println(index2);//4}
}

2、String类判断的方法

1、equals(Object obj):比较两个字符串中的内容是否相同,比较的是内容不是地址

2、equalsIgnoreCase(String otherStr):不区分大小写比较两个字符串中的内容,常用于验证码比较

3、startsWith(String str):判断是否以指定开头

4、endsWith(String str):判断是否以指定结尾

5、isEmpty():判断是否为空

public class Demo03 {public static void main(String[] args) {String str1 = "abc";String str2 = new String("abc");System.out.println(str1 == str2); //false 不是一个对象,地址不相同 System.out.println(str1.equals(str2));//true 重写过后的方法比较的是内容//不区分大小写比较String s = "aBCd";String s2 = "AbcD";System.out.println(s.equalsIgnoreCase(s2));//true//判断是否已指定开头String str3 = "https://www.4399.com";System.out.println(str3.startsWith("https://"));//true//判断是否已指定结尾String str4 = "作者与室友不可描述的小秘密.avi";System.out.println(str4.endsWith(".avi"));//true//判断一个字符串是否为空字符串String str5 = "";//叫做空  null表示没有任何引用指向他,就没有对象System.out.println(str5.isEmpty());//true//        str5 = null; 空指针异常  NullPointerException
//        System.out.println(str5.isEmpty());}
}

3、String类型转换方法

1、getBytes(): 把字符串转为byte数组, 返回一个byte数组

2、toCharArray(); 把当前字符串转为字符数组,返回一个字符数组

3、toUpperCase():=把字符串中的英文全部提升为大写,返回一个新字符串

4、toLowerCase():将字符串中的英文全部转为小写,返回一个新字符串

5、concat(String s):字符串的拼接,将指定的字符串和参数字符串进行拼接,用的比较少,因为**+也可以完成**

6、系列方法valueOf():静态方法,可以将任意数据类型转为字符串类型,但是用的比较少,因为一般使用的时候 其他类型+ “” 也可以完成

public class Demo04 {public static void main(String[] args) {String s = "abcdef";//将一个字符串转为字节数组byte[] b = s.getBytes();for (int i = 0; i < b.length; i++) {System.out.print(b[i]+" ");//97 98 99 100 101 102 a}//转为字符数组char[] cs = s.toCharArray();for (int i = 0; i < cs.length; i++) {System.out.print(cs[i]+" ");//a b c d e f}//将字符串中的字母全部转为大写  返回一个新的字符串String s1 = s.toUpperCase();System.out.println(s1);//ABCDEF//将字符串中的字母全部转为小写String s2 = "ABcdEfg";String s3 = s2.toLowerCase();System.out.println(s3);//abcdefg//concat字符串拼接String str1 = "书源好帅啊";String str2 = "好想抱抱他呀";System.out.println(str1 + str2);System.out.println(str1.concat(str2));int a = 100;double d = 3.14;boolean boo = true;System.out.println("" + a);//valueOf 静态方法String s6 = String.valueOf(a);//100String s5 = String.valueOf(d);//3.14String s4 = String.valueOf(true);//trueSystem.out.println(s4 + s5 + s6);//true3.14100}
}

4、String类的其他方法

1、replace(String oldStr,String newStr):将调用者中的老字符串替换为新字符串,返回值替换之后的字符串

2、trim(): 去除两端的空格或者制表符 只能去除两端 返回值是一个新字符串

3、split(String regex):将字符串按照参数字符串regex规则进行切割,返回值是一个String[]

public class Demo05 {public static void main(String[] args) {String s = "美羊羊刚又说喜羊羊非常非常不喜欢我";//非常不喜欢String replace = s.replace("非常非常不喜欢", "深爱着");System.out.println(replace);// 美羊羊刚又说喜羊羊深爱着我//去除两端的空格和制表符String user = "     ab c    ";String username = "ab c";System.out.println(user.trim().equals(username));//true//定义一个字符串,2022-6-29//想要单独的获取出年月日   年-月-日//可以使用-进行分割String str = "2022-6-29";String[] split = str.split("-");for (int i = 0; i < split.length; i++) {System.out.println(split[i]);}}
}

练习

1、键盘录入一个英文字符串,将英文字符串的首字母大写,其他字母全部转为小写

public class Demo06 {public static void main(String[] args) {
//        1、键盘录入一个英文字符串,将英文字符串的首字母大写,其他字母全部转为小写//键盘了录入Scanner sc = new Scanner(System.in);System.out.println("请输入一段英文字符串");String next = sc.next();//先获取首字母String s1 = next.substring(0, 1);//获取剩余的字母String s2 = next.substring(1);String s3 = s1.toUpperCase();//将首字母大写String s4 = s2.toLowerCase();//将剩余字母小写System.out.println(s3 + s4);//链式编程,只要返回值是某个类型,就可以继续调用该类型的方法String concat = next.substring(0, 1).toUpperCase().concat(next.substring(1).toUpperCase());System.out.println(concat);}
}

二、StringBuilder

StringBuilder可变的字符序列,允许修改字符串中的内容,在类中提供了修改成员变量的方法有大量的append,insert方法,可以操作任意类型的数据 、在底层维护的是一个char数组,他的可变都是在修改数组中的内容,本质上类中定义了一个Value属性,是char[]

StringBuilder和String的区别

(1) String是不可变的,没有提供修改成员的方法,StringBuilder是可变的,因为提供了修改的方法

(2) String长度也是不可以变的,StringBuilder的长度可以发生变化,可以认为是一个可以伸缩的容器,用于存储字符串

1、StringBuilder的构造方法

1、StringBuilder():空参数构造,默认会生成一个16大小的字符数组 32个字节

2、StringBuilder(String str):使用指定的字符串初始化StringBuilder对象,此时申请的数组长度为str.length() + 16

3、StringBuilder(int capacity):通过参数指定数组的大小

4、获取容积的方法capacity() 获取当前容器的大小

5、length(); 获取当前容器的字符的个数

public class Demo07 {public static void main(String[] args) {//默认空参是16大小的字符数组StringBuilder sb = new StringBuilder();//获取容积System.out.println(sb.capacity());//16//获取字符个数System.out.println(sb.length());//0//StringBuilder(String str) 容积 str.length + 16StringBuilder sb1 = new StringBuilder("abc");System.out.println(sb1.capacity());//19System.out.println(sb1.length());//3//指定容积StringBuilder sb2 = new StringBuilder(10);System.out.println(sb2.capacity());//10sb2.append("123456789");System.out.println(sb2.length());//9System.out.println(sb2.capacity());//10sb2.append("a");sb2.append("aa");//如果原来的存储不下了,就会扩容  (原来的大小+1) * 2System.out.println(sb2.length());//12System.out.println(sb2.capacity());//22}
}

2、StringBuilder的添加功能

1、append(任意类型):在StringBuilder对象后面拼接任意数据

2、insert(int index,任意类型): 在指定的位置拼接数据,index范围不能越界,0~容积-1

public class Demo08 {public static void main(String[] args) {//向StringBuilder末尾添加数据StringBuilder sb = new StringBuilder("123456");//insert()在指定的位置拼接数据,index范围不能越界,0~容积-1sb.insert(1,"喜羊羊啊");System.out.println(sb);//插入的时候必须保证前面有元素
//        sb.insert(13,"哎哎哎");System.out.println(sb);char[] c = {'你','好','啊'};sb.insert(0,c);System.out.println(sb);Object o = new Object();sb.insert(0,o);System.out.println(sb);}//快速封装方法 ctrl + alt + mprivate static void test(StringBuilder sb) {sb.append("周三啦");sb.append("好快啊");sb.append("过周日就马上一年就结束了");System.out.println(sb);}
}

3、StringBuilder的删除功能和修改

1、deleteCharAt(int index):删除指定位置(索引)的字符

2、delete(int start, int end):删除指定范围的字符,含头不含尾

3、replace(int start,int end,String str):把指定位置strat开始到end-1的位置的内容,替换为str,含头不含尾

4、reverse():将原来的字符串反转

public class Demo09 {public static void main(String[] args) {StringBuilder sb = new StringBuilder("张三不喜欢李四");sb.deleteCharAt(2);System.out.println(sb);//含头补含尾  索引位置sb.delete(2,4);System.out.println(sb);//替换sb.replace(0,2,"三三");System.out.println(sb);sb.reverse();//反转System.out.println(sb);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java-类加载机制

Java 中的类加载机制是一种动态加载类的方式&#xff0c;主要负责将类的字节码从文件系统或网络中读取到 JVM 内部&#xff0c;并进行相应的解析、链接和初始化。类加载机制保证了 Java 程序在运行时能够动态加载所需的类。以下是 Java 类加载机制的几个关键概念和过程&#xf…

QImage显示图片像素

在Qt中&#xff0c;QImage 类是用来表示和处理图像的。如果你想查看或显示一个图片的像素数据&#xff0c;你可以使用 QImage 提供的方法来访问这些数据。以下是一些基本的方法来获取和显示图片的像素信息&#xff1a; 获取图像的像素格式&#xff1a; 使用 QImage::format() …

阶段三:项目开发---民航功能模块实现:任务24:航空实时监控

任务描述 内 容&#xff1a;地图展示、飞机飞行轨迹、扇区控制。航空实时监控&#xff0c;是飞机每秒发送坐标&#xff0c;经过终端转换实时发送给塔台&#xff0c;为了飞机位置的精准度&#xff0c;传输位置的密度很大&#xff0c;在地图位置显示不明显。本次为了案例展示效…

Linux基础知识(十六)shell脚本编程

一、简介 用户通过shell向计算机发送指令计算机通过shell给用户返回指令的执行结果 1.1 通过shell编程可以达到的效果 提高工作效率可以实现自动化 1.2 需要学习的内容 Linuxshell的语法规范 1.3 编写shell的流程 第一步&#xff1a;用vi/vim创建一个.sh的文件第二步&am…

rust way step 1

install rust CARGO_HOME D:\rust\.cargo RUSTUP_HOME D:\rust\.rustup [dependencies] ferris-says "0.2" vscode 安装rust 插件 use ferris_says::say; // from the previous step use std::io::{stdout, BufWriter};fn main() {let stdout stdout();let m…

位运算在数据库中的运用实践-以MySQL和PG为例

目录 前言 一、两种不同的数据库设计 1、状态字段存储JSON 2、使用位运算 二、数据库中的位运算实践 1、MySQL中的位运算实践 2、PostgreSQL中位运算实践 三、总结 前言 最近在解决某用户的一个业务需求时&#xff0c;遇到一个很有意思的场景。首先先跟大家分享一下需求…

飞腾平台虚拟机组播性能调优指南

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

STM32G4 DMA的使用(寄存器开发)

下面以STM32G474为例&#xff0c;使用DMA来存储USART1的接收数据。 1. 查看硬件支持 首先查看要使用的DMA支持的通道数&#xff0c;在手册中有如下说明。 根据上图可以看到&#xff0c;对于不同的设备类型有不同的DMA通道数量。设备类型分类如下图所示。 我使用的是STM32G474…

Linux开发:通过memfd_create创建一个内存文件

memfd_create提供了一个方法,可以在内存中创建一个匿名文件,但是这个文件在真实的文件系统中却不存在。 #define _GNU_SOURCE #include <sys/mman.h> int memfd_create(const char *name, unsigned int flags); 参数: name:文件的名字 flags:常用参…

基于 TI AM62 测试 QtWayland 部署

By Toradex秦海 1). 简介 目前主流的 ARM 平台嵌入式 Linux BSP 的显示后端基本都已经从 X11 升级到了 Wayland&#xff0c; 而常用的 Wayland Compositor - Weston 对于 Linux 下常用的 Qt 图形界面开发框架的一些 Plugin (比如 Qt VirtualKeyboard) 的配合并不完善&#xf…

什么是边缘计算?创造一个更快、更智慧、更互联的世界

前言 如今&#xff0c;数十亿物联网传感器广泛部署在零售商店、城市街道、仓库和医院等各种场所&#xff0c;正在生成大量数据。从这些数据中更快地获得洞察&#xff0c;意味着可以改善服务、简化运营&#xff0c;甚至挽救生命。但要做到这一点&#xff0c;企业需要实时做出决策…

tableau标靶图,甘特图与瀑布图绘制 - 9

标靶图&#xff0c;甘特图与瀑布图 1. 标靶图绘制1.1 筛选器筛选日期1.2 条形图绘制1.3 编辑参考线1.4 设置参考线1.5 设置参考区间1.6 四分位设置1.7 其他标靶图结果显示 2.甘特图绘制2.1 选择列属性2.2 选择列属性2.3 创建新字段2.4 设置天数大小及颜色 3. 瀑布图绘制3.1 she…

【pytorch20】多分类问题

网络结构以及示例 该网络的输出不是一层或两层的&#xff0c;而是一个十层的代表有十分类 新建三个线性层&#xff0c;每个线性层都有w和b的tensor 首先输入维度是784&#xff0c;第一个维度是ch_out,第二个维度才是ch_in(由于后面要转置)&#xff0c;没有经过softmax函数和…

基于STM32的HAL库的WS2812幻彩灯驱动程序

1、WS2812幻彩灯带有三条接线&#xff0c;5V、GND和控制信号线&#xff0c;利用单片机的SPI引脚可以发出不同频率协议的脉冲即可实现对幻彩灯带的各个灯珠的颜色和亮灭的控制。 2、幻彩灯带驱动代码如下&#xff1a; &#xff08;1&#xff09;ws2812.c #include "ws28…

【利用GroundingDINO裁剪分类任务的数据集】及文本提示检测图像任意目标(Grounding DINO) 的使用

文章目录 背景1.Grounding DINO安装2.裁剪指定目标的脚本 背景 在处理公开数据集ImageNet-21k的时候发现里面有很多的数据有问题&#xff0c;比如&#xff0c;数据目标有很多背景&#xff0c;且部分类别有其他种类的图片。针对数据目标有很多背景&#xff0c;公开数据集ImageNe…

【数据库】Redis主从复制、哨兵模式、集群

目录 一、Redis的主从复制 1.1 主从复制的架构 1.2 主从复制的作用 1.3 注意事项 1.4 主从复制用到的命令 1.5 主从复制流程 1.6 主从复制实现 1.7 结束主从复制 1.8 主从复制优化配置 二、哨兵模式 2.1 哨兵模式原理 2.2 哨兵的三个定时任务 2.3 哨兵的结构 2.4 哨…

ArkUI开发学习随机——B站视频简介页面,美团购买界面

案例一&#xff1a;B站视频简介页面 代码&#xff1a; build() {Column(){Column(){Stack(){Image($r("app.media.genimpact")).width(200).height(125).borderRadius({topLeft:5,topRight:5})Row(){Image($r("app.media.bz_play")).height(24).fillColor…

【人工智能】Transformers之Pipeline(概述):30w+大模型极简应用

​​​​​​​ 目录 一、引言 二、pipeline库 2.1 概述 2.2 使用task实例化pipeline对象 2.2.1 基于task实例化“自动语音识别” 2.2.2 task列表 2.2.3 task默认模型 2.3 使用model实例化pipeline对象 2.3.1 基于model实例化“自动语音识别” 2.3.2 查看model与task…

如何通过Java操作Redis?——Jedis!

简介 在redis命令行客户端中操作redis是否可行&#xff1f;可行&#xff0c;但不方便且不是主流的方式。最终还是要通过Java代码来操作~ Redis的底层通信是遵守RESP协议的&#xff0c;一些第三方的库就实现了这些协议&#xff0c;然后封装好API&#xff0c;程序猿通过封装好的…

IEC62056标准体系简介-4.IEC62056-53 COSEM应用层

为在通信介质中传输COSEM对象模型&#xff0c;IEC62056参照OSI参考模型&#xff0c;制定了简化的三层通信模型&#xff0c;包括应用层、数据链路层&#xff08;或中间协议层&#xff09;和物理层&#xff0c;如图6所示。COSEM应用层完成对COSEM对象的属性和方法的访问&#xff…