String类知识

目录

一、String存在意义

二、字符串为何不可变

三、String类常用方法

        1、字符串构造

        2、String对象的比较

        3、字符串查找

        4、转化

        (1)数值和字符转化

        (2)大小写转换

        (3)字符串转数组

        (4)格式化

        5、字符串替换

        6、字符串拆分

        7、字符串截取

        8、字符串修改

        9、其他操作方法

四、StringBuilder和StringBuffer的使用和方法介绍

五、StringBuilder和StringBuffer的不同


一、String存在意义

        在c语言中我们以及接触到了字符串,但是表示字符串的方式只能是使用字符数组或者是字符指针,而Java面向对象很多时候离不开字符串,为了更好的实现面向对象的思想,Java提供了String类,这就是String类存在的意义

二、字符串为何不可变

        我们去写一个String类的时候,我们发现String类里面的内容不能直接被修改,为什么不能修改呢,我们先打开一下String类里面的构造:

         第一个final是不能被继承我们理解,那么第二个为啥不是字符串被修改的主要原因呢,上代码:

  public static void main(String[] args) {final char[] str={'1','2','3'};str[0]='4';System.out.println(str);}

        打印出来的结果是:

        为何会这样呢?主要得益于final修饰的一般是地址不能变,而修改数组里面的东西,地址是不会变化的,所以就算被fianl修饰,char[]里面的内容还是可以被修改。 而private私有化封装才是字符串不能被修改的本质原因。

三、String类常用方法

        1、字符串构造

         对于字符串的构造,常用的就三种构造方法——常量串构造,使用newString对象构造,使用字符数组构造,用代码来写如下:

 public static void main(String[] args) {//使用常量串构造String s1="wqe";//使用newString对象String s2=new String("wqer");//使用字符数组进行构造char[] str={'w','q','e'};String s3=new String(s2);System.out.println(s1);System.out.println(s2);System.out.println(s3);}

        打印结果如下:

        String类还提供了很多中字符串构造方法,而常用的就这三种

        2、String对象的比较

        一共有三种比较,第一种是==,第二种是equals方法比较,第三种是compareTo方法比较;

        对于==符号比较,比较的就是地址,equals方法比较的是里面的值是否相等,而且还是boolean类型,而compareTo方法是按顺序比较里面的字符串,相等则继续比较下一个,不相等则返回差值,值得注意的是,compareTo方法是按照ASC码里面的值进行比较,而对于相同的长度的字符串,返回-1或者1(根据前后俩个字符串哪个更长,前者减去后者)。  


public static void main(String[] args) {String q1="abc";String q2="abcA";String q3="abZ";String q4="abc";String q5=q1;//==比较地址System.out.println(q1 == q5);System.out.println(q1 == q3);System.out.println(q1 == q2);System.out.println("===========");//equals方法比较值System.out.println(q1.equals(q5));System.out.println(q1.equals(q3));System.out.println(q1.equals(q2));//compareTo桉顺序比较,不同返回差值,如果字符串长度不一样,而返回-1或者1System.out.println("===========");System.out.println(q1.compareTo(q4));System.out.println(q2.compareTo(q1));System.out.println(q1.compareTo(q3));
}

        而打印出来的结果是:

         总的来说,String类的比较方式还是挺常用的,可以根据自己需要去做出不同的比较方式。

        3、字符串查找

        字符串查找也是字符串中非常常见的操作,String类提供的常用查找的方法,如下图:

        

方法功能
char charAt(int index)返回index位置上字符,如果index为负数或者越界,抛出IndexOutOfBoundsException
int indexOf(int ch)返回ch第一次出现的位置,没有返回-1
int index(int ch,int fromIndex)从fromindex位置开始找ch第一次出现的位置,没有返回-1
int indexOf(String str)返回str第一次出现的位置,没有返回-1
'int indexOf(String str,int fromIndex)从fromIndex位置开始找str第一次出现的位置,没有返回-1
int lastIndexOf(int ch)从后往前找,返回ch第一次出现的位置,没有返回-1
int lastIndexOf(int ch,int fromIndex)从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返回-1
int lastIndexOf(String str)从后往前找,返回str第一次出现的位置,没有返回-1
int lastIndexOf(String str,int fromIndex)从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1

        

 public static void main(String[] args) {String s="abcabcabcqwertyuiopz";System.out.println(s.charAt(3));//aSystem.out.println(s.indexOf('a'));//0System.out.println(s.indexOf('a', 3));//3System.out.println(s.indexOf("cab"));//2System.out.println(s.indexOf("cab", 5));//5System.out.println(s.lastIndexOf(3));//-1(没有找到)System.out.println(s.lastIndexOf("a", 10));//6System.out.println(s.lastIndexOf("cabc"));//5System.out.println(s.lastIndexOf("cabc",7));//5}

        主要查找的方法就是这些,索引,向前往后查找和从后往前查找,查找字符串或者字符,第二个参数就是从第几个开始查找。

        4、转化

        (1)数值和字符转化

        数值和字符转化可以分为数值转化为字符串,也可以是字符串转化为数值,以代码为例:

        

  public static void main(String[] args) {//数字转字符串(通过String.valueOf)String s1=String.valueOf(1234);String s2=String.valueOf(12.34);String s3=String.valueOf(true);System.out.println(s1);System.out.println(s2);System.out.println(s3);System.out.println("============");int data1=Integer.parseInt("1234");int data2=Integer.parseInt("12534");System.out.println(data1);System.out.println(data2);}

        打印结果如下:

        .value()是转换为字符串的用法,而包装类.转换类型()是字符串转换为数值的方法。

        (2)大小写转换

        大小写转化主要用到了toUpperCasetoLowerCase的方法,toUpperCase()是将小写转换为大写的方法,toLowerCase()是将大写转换为小写的方法,如下:

        

 public static void main(String[] args) {String q1="qwe";String q2="QWE";System.out.println(q1.toUpperCase());System.out.println(q1.toLowerCase());}

        打印结果为:

 

        (3)字符串转数组

        字符串转为数组使用到toCharArray()方法,,然后数组转换为字符串也可以用到new String()方法,代码如下:

        

 public static void main(String[] args) {String w1="qwerty";//字符串转数组char[] ch= w1.toCharArray();for (int i = 0; i < ch.length; i++) {System.out.println(ch[i]);}System.out.println();//数组转字符串String s2=new String(ch);System.out.println(s2);}

        打印结果如下:

        (4)格式化

        格式化方法用到format方法,代码如下:

        

  public static void main(String[] args) {String e1=String.format("%d-%d-%d",2019,9,14);System.out.println(e1);}

         

        格式化主要是按照里面的格式打印,对于设置日期这些有很大帮助。

四、StringBuilder和StringBuffer的使用和方法介绍

        StringBuilder和StringBuffer的使用需要创建对象,不像String类那样可以直接String s="q",

需要new一个对象,代码如下:

 public static void main(String[] args) {//StringBuffer sbd="qwe";//会报错StringBuilder sbd=new StringBuilder("wqwq");StringBuffer sbf=new StringBuffer("asd");System.out.println(sbd);System.out.println(sbf);}

        打印出来结果是:

        

        那么它们有什么不同呢?方法上有很大不同,我列出一个表格:

方法说明
StringBuff append(String str)在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、double、float、int、long、Object、String、StringBuff的变量
char charAt(int index)获取index位置的字符
int length()获取字符串的长度
int capacity()获取底层保存字符串空间总的大小
void ensureCapacity(int mininmumCapacity)扩容
void setCharAt(int index,char ch)将index位置的字符设置为ch
int indexOf(String str)返回str第一次出现的位置
int indexOf(String str,int fromIndex)从fromIndex位置开始查找str第一次出现的位置
int lastIndexOf(String str)返回最后一次出现str的位置
int lastIndexOf(String str,int fromIndex)从fromIndex位置开始找str最后一次出现的位置
StringBuffer insert(int offset,String str)

在offset位置插入:八种基本类型&String类型&

Object类型数据

StringBufferdeleteCharAt(int index)删除index位置字符
StringBuffer delete(int start, int end)删除[start,end)区间内的字符
 StringBuffer replace(int start, int end, String str)将[start,end)位置的字符替换为str
tring substring(int start)从start开始一直到末尾的字符以String的方式返回
String substring(int start, int end)将[start,end)将[start,end)范围内的字符以String的方式返回
StringBuffer reverse()反转字符串
ring toString()将所有字符按照String的方式返回

五、StringBuilder和StringBuffer的不同

        StringBuilder更适合于单线程,StringBuffer更适合多线程,为什么呢,我们打开这俩个的里面内容来看:

        这个是StringBuffer的,它的里面有锁,更适合多线程,而StringBuilder里面是没有锁的,更适合单线程,但速度更快。

 

 

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

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

相关文章

系统架构设计师【补充知识】: 应用数学 (核心总结)

24.1 图论之最小生成树 (1)定义: 在连通的带权图的所有生成树中&#xff0c;权值和最小的那棵生成树(包含图中所有顶点的树)&#xff0c;称作最小生成树。 (2)针对问题: 带权图的最短路径问题。 (3)最小生成树的解法有普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法&#xff0c;我…

重复文件怎么查找并清理,试试这5个文件去重方法(新)

重复文件怎么查找并清理&#xff1f;日常工作中&#xff0c;我们使用电脑的时间长了&#xff0c;都会累积大量好的文件&#xff0c;这其中难免会出现重复文件。这些重复文件不仅占用了电脑磁盘空间&#xff0c;还会降低电脑性能。因此&#xff0c;我们必须定期对重复文件查找出…

fastapi学习前置知识点

前置知识点 FastApi&#xff1a;一个用于构建API的现代、快速&#xff08;高性能&#xff09;的web框架。 FastApi是建立在Pydantic和Starlette基础上&#xff0c;Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库。Starlette是一种轻量级的ASGI框架/工具包…

GIF录屏工具Gif123 v3.3.0单文件

软件介绍 GIF的优势是小、轻、快&#xff0c;适合时间短、画面小、需要嵌入其他页面&#xff0c;打开就自动循环播放的动画。Gif123可录制合成鼠标轨迹,可调整鼠标指针大小,可在设置中打开鼠标指针高亮光圈功能,高亮光圈可跟随鼠标移动以指示鼠标位置。软件极其简单&#xff0…

流水线建构apk、abb实战(二)

gradlew 命令生成apk、aab包 其实构建应用程序包就几个命令&#xff1a; ### 生成AAB&#xff1a; gradlew bundleRelease #输出到[project]/build/outputs/bundle/release/下 gradlew bundleDebug### 生成APK&#xff1a; gradlew assembleRelease gradlew assembleDebug###…

菜刀冰蝎哥斯拉流量通讯特征绕过检测反制感知

1.加密流程 工具名称requestsresponseAntSwordbase64等方式明文冰蝎2.0开启Openssl扩展-动态密钥aes加密aes加密base64未开启Openssl扩展-异或异或base64冰蝎3.0开启Openssl扩展-静态密钥aes加密aes加密base64未开启Openssl扩展-异或异或base64哥斯拉php的为base64异或base64异…

游戏《酒店业领袖》

为快餐连锁店麦当劳&#xff0c;我们创建了一款名为“好客领袖”的游戏。麦当劳的员工可以在网站上注册&#xff0c;并测试自己是否扮演酒店领导的角色&#xff0c;在餐厅可能出现的各种情况下快速做出决定。奖品等待着那些在比赛中表现最好的人。 对于该项目&#xff0c;我们&…

【Meetup】探索Apache SeaTunnel的二次开发与实战案例

在数据科技快速演进的今天&#xff0c;业务场景的复杂化和数据量的激增&#xff0c;推动了大数据技术的迅速发展&#xff0c;在众多开源大数据处理工具中&#xff0c;Apache SeaTunnel以其强大的数据集成能力&#xff0c;成为众多企业的首选。 但随着应用深入&#xff0c;企业面…

【三更新】多分式标注 脚本工具

这篇是 多分式标注 脚本工具的第三次更新文章。 原文章及历次更新请点击链接 【ArcGIS 脚本工具】生成多分式标注 【更新】多分式标注 脚本工具 【再更新】多分式标注&#xff08;船新版本&#xff09; 更新内容 1、组合字段标注 分子、分母、前分、后分&#xff0c;四个…

流水线建构apk、abb实战(一)

在构建机上需要下载的工具 流水线中的构建机无法使用Android Studio中自带的sdk工具下载&#xff0c;所以得下载commandlinetools命令行工具&#xff0c;下载后使用随附的 sdkmanager 下载其他 SDK 软件&#xff0c;解压后按照/cmdline-tools/latest/bin/sdkmanager目录结构整…

Camtasia Studio2024破解汉化版crack安装包下载地址

在当今数字化时代&#xff0c;视频内容已成为传播信息和吸引观众的重要方式。无论是企业宣传、在线教育还是个人创作&#xff0c;一款功能强大的视频编辑软件都是必不可少的工具。而Camtasia Studio2024作为业界领先的视频编辑软件&#xff0c;其永久免费版及最新版本的功能更是…

28 - 只出现一次的最大数字(高频 SQL 50 题基础版)

28 - 只出现一次的最大数字 select (selectnumfromMyNumbers group bynum havingcount(num)1order by num desc limit 1) as num;

二叉树的先序创建、复制、深度及结点个数

文章目录 前言一、二叉树的先序创建二、二叉树的复制三、二叉树的深度四、二叉树的结点个数总结 前言 T_T此专栏用于记录数据结构及算法的&#xff08;痛苦&#xff09;学习历程&#xff0c;便于日后复习&#xff08;这种事情不要啊&#xff09;。所用教材为《数据结构 C语言版…

体育器材管理系统(Java+MySQL)

技术栈 Java语言&#xff1a;作为主要编程语言&#xff0c;用于编写应用逻辑和界面交互。MySQL数据库&#xff1a;用于存储和管理体育器材的相关数据。Swing窗口视图&#xff1a;用于创建图形用户界面&#xff0c;使用户能够通过窗口进行操作&#xff08;GBK编码&#xff09;。…

线性模型-分类

一、线性判别分析LDA 线性判别分析是一种经典的线性学习方法&#xff0c;在二分类问题上最早是Fisher提出的&#xff0c;亦称为Fisher判别分析。 Fisher判别分析是一种用于降维和分类的统计方法&#xff0c;旨在找到可以最好区分不同类别的特征。它基于类内方差和类间方差的比…

Polar Web【简单】uploader

Polar Web【简单】uploader Contents Polar Web【简单】uploader思路EXP运行&总结 思路 本题的重点仍是文件上传&#xff0c;只是期间需要加上一步自主的文件上传。 打开环境&#xff0c;审查代码&#xff0c;发现在上传文件之后会自动生成一个以MD5散列值命名的目录&#…

COMPUTEX 2024 国际电脑展即将举行,英伟达宣布将Copilot+引入RTX系列设备,赋能游戏本AI助理

COMPUTEX 2024 国际电脑展即将于2024年6月4日至7日在台北南港展览馆1馆及2馆盛大举行。作为业界瞩目的盛会&#xff0c;本次展会不仅吸引了全球各地的科技爱好者&#xff0c;更迎来了AMD CEO苏姿丰博士和NVIDIA首席执行官黄仁勋的精彩演讲。 在展会的开幕之际&#xff0c;图形…

查看服务器端口是否打开,如何查看服务器端口是否打开

查看服务器端口是否打开&#xff0c;是确保服务器正常运行和网络通信畅通的关键步骤。以下是几个有力的方法&#xff0c;帮助你快速、准确地判断端口状态。 首先&#xff0c;你可以使用telnet命令来检测端口的连通性。telnet是一个网络协议&#xff0c;可以用于远程登录和管理网…

如何将 MySQL 数据库共享给他人?

文章目录 共享所有数据库给他人1. 连接到 MySQL 数据库2. 选择要使用的数据库3. 修改连接所需的 host4. 刷新权限 共享部分数据库给他人1. 创建用户2. 授权3. 刷新权限 结语 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是I…

张大哥笔记:高考,万人过独木桥,你怕不怕摔倒?

今天刷到一个新闻&#xff1a;宁夏煤业计划招600名挖煤的井下操作工&#xff0c;要求大学学历&#xff01;结果却吸引了7900人来报名&#xff01;我都惊呆了&#xff0c;什么时候挖煤都要求这么高的学历了&#xff0c;那读书到底起啥作用&#xff01; 如果一个人读书读到大学后…