常用类(二)--String类的简单总结

news2024/11/24 19:09:48

文章目录

  • 1.基本介绍
    • 1.1创建对象
    • 1.2找到对应下标的字符
    • 1.3找到对应字符的下标
    • 1.4指定位置开始遍历
    • 1.5反向进行遍历
    • 1.6大小写之间的转换
    • 1.7字符串转换为数组
    • 1.8元素的替换
    • 1.9字符串的分割
    • 1.10字符串的截取
  • 2.StringBuilder和StringBuffer
    • 2.1 StringBuilder的引入
    • 2.2面试题目

1.基本介绍

C语言里面的字符串以\0结尾,java里面没有斜杠0结尾这个说法,C语言里面只能使用字符数组和指针;

1.1创建对象

下面展示的这个就是创建String对象的三个方式:

  • 直接把这个字符串传递过去,下面的就是“abcdef字符串直接传递过去;
  • 因为这个String也是一个类,因此我们就可以直接把这个new的对象传递过去;
  • 第三个方式就是传递我们的字符数组,也是可以帮助我们创建对象,这个其实就是把上面的第二个方式分步操作,显示定义字符数组,然后是把这个字符数组作为参数进行传递,第二个就是直接把这个数组作为参数进行传递;
  • equalsIgnoreCase这个方法是进行字符串之间的比较,但是会忽略大小写;

image-20241011215150305

1.2找到对应下标的字符

下面的这个就是charAt方法,这个方法的作用就是我们把这个下标传递过去,这个时候我们的返回值就是从左向右进行寻找对应下标的元素字符,然后打印输出;

image-20241011215449916

1.3找到对应字符的下标

我们也可以根据这个字符打印输出这个字符的下标,使用的就是我们的indexOf方法进行输出的;

image-20241011215550633

1.4指定位置开始遍历

如果我们想要把这个开始查找的位置进行修改,这个方法里面我们可以进行这个参数的添加,上面的是只给出来一个字符,这个就是从0下标开始查找,但是如果我们给出两个参数:第一个参数是我们开始查找的下标,第二个是查找的字符,这个时候就会从我们指定的下标开始查找;

image-20241011215630287

1.5反向进行遍历

上面的查找是进行的正向的遍历,我们可以使用这个lastIndexOf方法进行反向的便遍历,这个也可以给一个参数,可以给多个参数;

image-20241011215859497

1.6大小写之间的转换

下面的就是两个大小写字母混合组成的一个字符串,这个里面的toUpperCase就是把我们的这个已知的字符串转换为一个全部大写的字符串;

toLowerCase就是把这个已知的字符串转换为全部小写的字符串,但是需要注意的是,我们的这个转换是新创建一个一样的对象,在这个对象的基础上面进行修改,我们的这个修改都不会影响原来的字符串;

image-20241012112811040

1.7字符串转换为数组

为什么要把这个字符串转换为数组,因为转换为数组之后,我们可以使用下标对于这个里面的元素进行遍历和管理,我们可以随时随地的取出来这个数组里面的任意位置的元素;

下面还写了一个format方法,这个方法就是让这个内容以指定的格式打印出来,就是对于我们的这个打印格式进行设置的一个方法;

image-20241012133059195

1.8元素的替换

元素的替换是使用的这个replace关键字,我们的这个replace支持重载方法,下面展示的就是四种重载的方式,第一个表示把a全部替换为k字符,第二个表示把ab字符组合全部替换为klp字符组合,第三个就是把这个里面的第一个ab组合替换为klp,第四个就是把这个里面的所有的ab字符组合替换为klp字符组合这个其实和第二个没有什么区别,酌情进行选择即可;

image-20241012133339093

1.9字符串的分割

这个使用的是我们的split方法,我们的这个参数表示的就是从=位置开始分割,分割成为两个部分,我们分割之后的组成一个数组,我们使用数组进行接收,然后可以使用循环,打印出来分割之后的每一个部分的内容;

下面的这个是点号进行分割,我们的参数需要加上两个斜杠,这个主要是涉及到正则表达式,感兴趣同学课下了解即可;

image-20241012133401655

1.10字符串的截取

截取就是我们从这个字符串里面分割出来我们想要的部分,下面的两种重载的方式,第一个就是使用一个参数的substring,这个表示的就是我们的这个字符串从第三个位置开始截取,没有第二个参数就是默认到最后一个元素才会停止,如果有第二个参数,表示把这个区间里面的字符串进行截取;

image-20241012133435586

2.StringBuilder和StringBuffer

2.1 StringBuilder的引入

因为String的不可变性,为了我们更好的对于这个字符串进行修改,因此这个地方我们提供了StringBuilder和StringBuffer类;

我们下面展示的就是日常我们创建一个字符串,然后使用+进行字符串的拼接,因此这个时候两个部分就拼接到了一起,但是实际上这个是创建了一个对象,把我们的hello追加到这个里面,然后使用append再把这个world再次追加到这个字符串的后面;

因为两次追加之后我们的这个结果仍然是一个StringBuilder,因此这个时候我们使用这个toString方法,把这个对象转换为string类型的,然后打印输出,这个才是+真正发生的过程,而不是像我们的直接拼接那么简单;

image-20241012180023412

在下面的这个append的底层源码里面,我们可以看到这个添加之后就是返回的this,因此可以说明这个就是在原来的这个字符串的基础上进行修改的,然后返回的就是我们修改之后的字符串,这个进一步验证我们的stringBuilder就是可以修改的这个特性;

image-20241012180934578

2.2面试题目

String,StringBuilder,StringBuffer的区别:

  1. String的内容不可以进行修改,StringBuilder,StringBuffer的内容可以进行修改;
  2. StringBuilder,StringBuffer的大部分的功能都是相似的;
  3. StringBuilder采用同步处理,属于线程安全操作,StringBuffer没有采用同步处理,属于不安全操作;
  4. StringBuilder多在单线程的情况下使用,StringBuffer多在多线程的情况下使用

下面的这个同样是一个面试的题目,考察我们对于这个引用的理解,这个里面主要就是画出堆栈图,但是这个题目很容易错误,如果对于这个引用理解的不透彻的话;

public class Example{
    String str = new String("good");
    char[ ] ch = { 'a' , 'b' , 'c' };
    public static void main(String args[]){
        Example ex = new Example();
        ex.change(ex.str,ex.ch);
        System.out.print(ex.str + " and ");
        System.out.print(ex.ch);
    }
    public void change(String str,char ch[ ]){
        str = "test ok";
        ch[0] = 'g';
    }
}

画图分析:从这个图里面我们可以看到原来的指向,以及这个传参之后的指向,我们的str1形参只是引用,这个时候change里面就是让这个形参执行了新的空间罢了,并没有低于这个内容进行修改,这个ch数组才是正经的对于这个引用里面的内容进行了修改,但是我们打印这个ex.str的时候指向的还是我们的原来的good这个内容;

image-20241012190943563

接下来我们还是在这个IDEA里面演示一下两个情形:下面的这个就是为了说明问题,我们的func1方法对于这个传递过来的参数,也是指向了新的空间,并没有修改,而这个func2里面才是修改这个引用指向的内容;

image-20241012191017177

通过这个题目,希望大家可以理解,同样是引用,但是我们的用法不同,结果也是不同的,我们可以让这个引用指向新的空间内容,也可以让这个引用指向的内容进行修改,需要注意甄别~~

[外链图片转存中…(img-JBBf27JB-1728731569799)]

通过这个题目,希望大家可以理解,同样是引用,但是我们的用法不同,结果也是不同的,我们可以让这个引用指向新的空间内容,也可以让这个引用指向的内容进行修改,需要注意甄别~~

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

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

相关文章

拆解学习【无线充,EMMC,锂电池电量计,OTA】(二)

主要学习到了:无线充,EMMC,手表CPU方案,锂电池电量计,OTA。 无线充电功能是产品的核心卖点之一,充电头网通过拆解发现,手表内部使用恒玄BES2500BP智能手表单芯片解决方案,内置四核C…

BetterZip怎么导入文件进行压缩?苹果解压软件怎么用?

BetterZip作为苹果系统常用的压缩文件软件之一,具有使用方便、压缩导出格式多、兼容性强等特点。我们要使用BetterZip进行文件压缩时,首先需要将文件导入到BetterZip才可以。 关于BetterZip的文件导入方式,主要有几种,今天我来给…

垂直AI大模型行业全景分析及发展趋势研究报告

2024-10-12调研咨询机构环洋市场咨询出版的【全球垂直AI大模型行业总体规模、主要厂商及IPO上市调研报告,2024-2030】只要调研全球垂直AI大模型总体规模,主要地区规模,主要企业规模和份额,主要产品分类规模,下游主要应…

每日一题|3158. 求出出现两次数字的 XOR 值|哈希

题目给的范围很小,50以内,所以什么数据结构都可以。 这里采用set来维护访问过的数字,利用哈希来提升时间效率。 class Solution:def duplicateNumbersXOR(self, nums: List[int]) -> int:visited set()l []res 0for i in nums:if i i…

游戏如何应对薅羊毛问题

在大众眼里,“薅羊毛”是指在电商领域,“羊毛党”利用平台、商家的促销规则,低价获取商品和服务的行为。如前不久“小天鹅被一夜薅走7000万”的案例震惊全网。 然而实际上,“薅羊毛”现象不仅存在于电商场景,在游戏中…

【Unity】TextMeshPro 3.0.9无法显示emoji表情问题

需要下载TextMeshPro 3.2.x-pre.xxx版本,重新生成Sprite Asset文件解决 注意:若Package Manager没有搜到pre版本,那么可以去github下载到本地,再解压后,将文件夹移动到工程Packages文件夹下,然后打开Packa…

基于SpringBoot的体育商城购物系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

React复习

文章目录 常用的HooksuseStateuseReduceruseRefuseContextuseMemouseCallbackuseEffect 组件通信Props(属性)Ref(引用)Context(上下文)State(状态)回调函数Event Bus(事件…

Python WebSocket 的原理及其应用

Python WebSocket 的原理及其应用 在现代 Web 开发中,实时通信成为了越来越多应用的重要组成部分。尤其是像聊天应用、实时数据更新、在线游戏等场景,服务器与客户端之间的即时数据传输需求非常迫切。在传统的 HTTP 协议中,通信往往是基于请…

在docker的容器内如何查看Ubuntu系统版本

文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境: docker 一、问题描述 由于 lsb_release -a 只能查看自己电脑(宿主机)的系统版本,如果在docker的容器内又应该如何查看Ubuntu系统版本呢&#xff…

GoPro 解决方案:恢复 GoPro 数据、GoPro 重置为出厂设置

在本文中,我们将向您展示如何轻松将 GoPro 相机重置为出厂设置以及如何从已重置为出厂设置的 GoPro 中恢复丢失的数据。 第 1 部分:将 GoPro 重置为出厂设置后恢复丢失的数据。 ​在将 GoPro 重置为出厂设置之前,最好对视频进行完整备份。但…

URDF统一机器人建模语言

统一机器人建模语言 URDF(Unified Robot Description Format)统一机器人描述格式,URDF使用XML格式描述机器人文件。 我们从下面四个方面介绍URDF: URDF的组成介绍 URDF-Link介绍 URDF-Joint介绍 创建一个简单的URDF…

大数据新视界 --大数据大厂之差分隐私技术在大数据隐私保护中的实践

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

ribbon和nginx负载均衡图解

通俗来说 nginx: 规定一个地址v(比如v代理了地址a,b,c,d且他们都实现了同一个服务e),然后当我们的请求想要实现e服务而去请求v的时候,v实际上就会从a,b,c,d中选一个来让他们给请求者提供服务。 ribbon: …

[Halcon矩阵] 通过手眼标定矩阵计算相机旋转角度

📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…

idear2024-Springcloud项目一个服务创建多个实例/端口

国庆重装系统,安装了最新版的idear,结果带来一堆bug。 解决办法: 初始配置: 初始状态: 1.点击右上角3个点,再点击编辑 2.点击修改选项 3.点击允许多个实例 可以发现下面多了个选项 点击:应用-》确定 4.修…

windows自动化(一)---windows关闭熄屏和屏保

电脑设置关闭屏幕和休眠时间不起作用解决方案 一共三个方面注意: 一、关闭屏保设置: 二、电源管理设置 三、关闭盖子不做操作: 第一点很重要,就算二三都做了,一没做,照样不行。

win软件 超强的本地视频 图片去水印 动态水印!

AI视频图片去水印 HitPaw Watermark Remover 电脑软件,内涵安装教程,以后看到有水印的视频不怕啦,用这个就行了,可以去除动态水印! 【下载】 https://pan.quark.cn/s/1ba6f088f0b2 【应用名称】:HitPaw Watermark R…

[Linux] Linux 进程程序替换

标题:[Linux] Linux 进程程序替换 个人主页水墨不写bug (图片来源于网络) 目录 O、前言 一、进程程序替换的直观现象(什么是进程程序替换?) 二、进程程序替换的原理 三、进程程序替换的函数&#xff08…

软件游戏d3dx9_43.dll丢失怎么解决,总结6个解决方法

d3dx9_43.dll是DirectX 9组件的一部分,这是一个由微软开发的图形API,用于处理与游戏和多媒体相关的图形渲染。d3dx9_43.dll库包含了DirectX 9中用于3D图形渲染和处理的许多实用程序函数。这些函数为开发者提供了创建复杂3D模型、纹理映射、光影效果以及各…