【JavaSE】搞定String类

前言

本篇会细致讲解String类的常见用法,让小伙伴们搞定String类~

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

前言

常用的三种字符串构造

字符串长度length

字符串比较

==比较

比较字符串的内容equals

忽略大小写比较equalsIgnoreCase

比较字符串大小compareTo

忽略大小写比较compareToIgnoreCase

 获取字符串中某一个字符

通过字符获取下标indexOf

从指定位置开始找

从后的指定位置开始找lastIndexOf

转化

数值和字符串转化valueOf

字符串转数值parseInt和parseDouble 

大小写转化toLowerCase和toUpperCase

将字符串转数组toCharArray

格式化format

字符串替换replace

替换字符串的第一个replaceFirst和整体替换replaceAll

字符串拆分split

多次拆分

字符串截取substring

去掉字符串左右两边的空格trim

字符串不可变性

字符串拼接

​编辑

String、StringBuffer、StringBuilder的区别


常用的三种字符串构造

    public static void main(String[] args) {//直接赋值的方法, 定义字符串String str1="abcdef";//简写形式String str2=new String("hello Word!");//用字符数组 构造字符串char[]array={'a','b','c'};String str3=new String(array);System.out.println(str1);System.out.println(str2);System.out.println(str3);}

结果

String是引用类型,内部并不存储字符串本身

    // s1和s2引用的是不同对象 s1和s3引用的是同一对象String s1 = new String("hello");String s2 = new String("world");String s3 = s1;

字符串长度length

  • .length用于求字符长度
  • .isEmpty用于判断字符串是否为空
        String str1="abcdef";System.out.println(str1.length());//6String str2=null;System.out.println(str2);//nullSystem.out.println(str1.length());//空指针异常String str3="";System.out.println(str3.length());//0System.out.println(str3.isEmpty());//用于判断字符串是否为空 返回true或false

字符串比较

==比较

注意:

  • 对于内置类型,   ==比较的是变量中的
  • 对于引用类型,   ==比较的是引用中的地址

下面代码结果是true还是false?

        String str1="abcdef";String str2="abcdef";System.out.println(str1==str2);

答案是true,解释如下

只要是双引号引起来的字符串常量,会存在一个字符串常量池中。

存储逻辑:先检查内存(字符串常量池)中是否有这个字符串;如果没有,存进去;如果有,直接去现有对象的即可。

上面代码str1先存在了字符串常量池中,str2不会在生成一个对象了,而是直接指向str1同一个对象。

不同上一题,下面代码结果是true还是false?

        String str3=new String("abcd");String str4=new String("abcd");System.out.println(str3==str4);

结果是false

因为这里是强制产生了两个不同的对象,位于两个不同的空间,所以str3和str4是两个不同的字符串,结果是false

比较字符串的内容equals

System.out.println(str1.equals(str2));System.out.println(str3.equals(str4));

这里的结果两个都为true,equals比较的是两者的内容是否一致

忽略大小写比较equalsIgnoreCase

        System.out.println(str3.equalsIgnoreCase(str4));

比较字符串大小compareTo

  1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
  2. 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值
        String str1="abcde";String str2="edf";System.out.println(str1.compareTo(str2));

忽略大小写比较compareToIgnoreCase

        System.out.println(str1.compareToIgnoreCase(str2));

 获取字符串中某一个字符

        String str1="abcde";char ch=str1.charAt(2);System.out.println(ch);

通过字符获取下标indexOf

int index =str1.indexOf('d');
System.out.println(index);

从指定位置开始找

        int index =str1.indexOf('a',2);//从2位置开始找a

从后的指定位置开始找lastIndexOf

        String str3="ababcabcd";int index3=str3.lastIndexOf('a',4);System.out.println(index3);//2

转化

数值和字符串转化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);

字符串转数值parseInt和parseDouble 

        int data1=Integer.parseInt("1234");//用类调用的方法,说明parseInt是静态方法double data2=Double.parseDouble("23.34");System.out.println(data1+6);System.out.println(data2+6);

 查看parseInt源码,他是被static修饰的

大小写转化toLowerCase和toUpperCase

        String str1="ABCD";//大写转小写String str2=str1.toLowerCase();//不是在原字符串本身进行修改(str1并没有改变,str2是产生的新的对象)System.out.println(str1);System.out.println(str2);String str3=str2.toUpperCase();//小写转大写System.out.println(str3);

 结果如图

 

将字符串转数组toCharArray

        String str1="ABCD";char[]array=str1.toCharArray();System.out.println(Arrays.toString(array));

结果如图

格式化format

String s=String.format("%d-%d-%d",2024,4,15);System.out.println(s);

字符串替换replace

有两种替换(replace的重载)

图中第一种是字符整体替换,第二种是字符串整体替换

        String str1="abcdab";String ret=str1.replace('a','z');String ret2=str1.replace("ab","yiyi");System.out.println(ret);System.out.println(ret2);

结果

替换字符串的第一个replaceFirst和整体替换replaceAll

        //替换字符串的第一个String ret3=str1.replaceFirst("ab","yiyi");System.out.println(ret3);//字符串的整体替换String ret4=str1.replaceAll("ab","ttttt");System.out.println(ret4);

结果

字符串拆分split

        //字符串拆分String s1="abc&tttt&hijk";String []str1=s1.split("&",2);//2表示最多分两组for (String s:str1) {System.out.println(s);}

结果

注意:

  1. 字符"|","*","+"都得加上转义字符,前面加上 "\\" . 
  2. 而如果是 "\" ,那么就得写成 "\\\\" .
  3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.

 代码示例

        String s2="2024.4.15";String []str2=s2.split("\\.");String s3="abc&pppp*hhhh";String []str3=s3.split("&|\\*");//用|表示将&和*分开,有这两个分隔符,用\\表示转义*

多次拆分

//多次拆分String str="name=zhangsan&name=lisi";String[]strings=str.split("&");for (String s:strings) {String []ss=s.split("=");for (String x:ss) {System.out.println(x);}}

结果

字符串截取substring

        //字符串截取String s1="abcdrrrr";//从指定下标开始一直往下截取String s2=s1.substring(1);System.out.println(s2);//截取目标下标下的字符串String s3=s1.substring(2,5);//左闭右开[2,5)System.out.println(s3);

去掉字符串左右两边的空格trim

       String s1="    ab s c   d    f    ";System.out.println(s1);String s2=s1.trim();//去掉字符串左右两边的空格System.out.println(s2);

结果

字符串不可变性

字符串String类的源码中,value的值被final修饰,不能发生改变(value指向不能发生改变),但它指向的对象的内容是可以修改

又因为value被private封装了,源码中有没有get和set方法,使得字符串具有不可变性。

例如下面代码中数组array被final修饰

        final int[]array=new int[]{1,3,4};array=new int[]{1,3,6};//报错array[0]=99;//可以修改

所以字符串实际上是不能被修改的。

尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率 非常低下。

字符串拼接

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大 部分功能是相同的。以下演示StringBuilder

StringBuilde用于在原字符串上拼接字符串

        StringBuilder stringBuilder=new StringBuilder("abcd");stringBuilder.append("yyyyyyy");

结果

String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可 以修改。频繁修改字符串的情况考虑使用StringBuilder。

String、StringBuffer、StringBuilder的区别

  • String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
  • StringBuffer与StringBuilder大部分功能是相似的
  • StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操 作。

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

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

相关文章

「2024」React 状态管理入门

概念 简单来说,状态指的是某一时刻应用中的数据或界面的呈现。这些数据可能包括用户填写表单的信息、应用内的用户偏好设置、应用的页面/路由状态、或者任何其他可能改变UI的信息。 状态管理是前端开发中处理用户界面(UI)状态的过程,在复杂应用中尤其重…

【DA-CLIP】图像退化类型检测功能演示代码

背景 在CLIP基础上微调而来,使用图像控制器编码生成退化类型embedding并在训练中对图像编码器进行控制。针对十种退化类型进行了训练。 解决CLIP模型在图像纹理等层面无法针对退化类型识别或识别率较低的问题。 训练数据集情况 GitHub有对应数据集连接 完整代码 项…

HBase的数据模型与架构

官方文档:Apache HBase – Apache HBase™ Homehttps://hbase.apache.org/ 一、HBase概述 1.概述 HBase的技术源自Google的BigTable论文,HBase建立在Hadoop之上,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,用于…

工作流引擎项目解析

API 编辑 在Camunda中,API的继承关系主要体现在各个服务接口之间。以下是Camunda中一些常见服务接口的继承关系: ProcessEngineServices 接口: RepositoryService: 负责管理流程定义和部署。 RuntimeService: 负责管…

2024年nodejs调用小红书最新关注(粉丝)follow接口,api接口分析2004-04-16

一、打开chrome按f12,点击右上角的“关注”按钮,抓包位置如下: (图1 follow接口) 二、follow接口分析 1、请求地址 https://edith.xiaohongshu.com/api/sns/web/v1/user/follow 2、请求方法: POST 3、请求头: :authority: edith…

最新AI创作系统ChatGPT网站源码AI绘画,GPTs,AI换脸支持,GPT联网提问、DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT…

25. 【Android教程】列表控件 ListView

在学习了 ScrollView 及 Adapter 两节内容之后,大家应该对 ListView 有了一些基本的了解,它是一个列表样式的 ViewGroup,将若干 item 按行排列。ListView 是一个很基本的控件也是 Android 中最重要的控件之一。它可以帮助我们完成多个 View 的…

Udio——革命性的AI音乐生成软件

Udio是一款革命性的AI音乐生成软件,由前谷歌DeepMind的顶尖AI研究人员和工程师共同创立,得到著名风险投资公司a16z的支持。它旨在为音乐爱好者和专业人士提供一个全新的音乐创作和分享平台。用户可以通过文本提示来生成音乐,支持广泛的音乐风…

水牛社:打造你的居家副业利器,让赚钱变得更简单

水牛社,这个已经陪伴我们走过九个春秋的综合性网络任务和项目资源整合平台,真的给我留下了深刻的印象。它不仅仅是一个资源的汇聚地,更是一个帮助无数人实现网络副业梦想的平台。作为一个资深用户,我深感其中的价值和魅力。 水牛…

“香港批准比特币、以太坊ETF”!华夏、博时、嘉实计划发行相关产品!美国ETF分析师泼冷水:别指望香港ETF会有很大流量!

周一(4月15日),比特币短线迎来反弹行情,币价回升至66000美元上方。华夏基金、博时国际与嘉实投资3家中国头部基金宣布,旗下虚拟资产现货ETF获准在香港发行。 据了解,华夏基金(香港)现计划发行能够投资于现货…

两部电话机怎样能实现对讲?直接连接能互相通话吗?门卫门房传达室岗亭电话怎么搞?

目录 两部电话机能直接连接吗?用三通头分出来一条电话线两部电话机用一根电话线直接连接能互相通话吗? 什么电话机可以直接连接两部IP电话机(网络电话机)可以直接连接两部普通电话机之间通过一个电话交换机也可以连接跨区域的两部…

mfc 带有复选框的ListBox

mfc 带有复选框的 ListBox 效果: 添加 ListBox 控件 从工具箱拖拽 ListBox 控件到窗口上,并设置属性: 包含字符串:true所有者描述:Fixed 给ListBox添加控制变量 添加完后,将m_list_box的类型使用CC…

react使用npm i @reduxjs/toolkit react-redux

npm i reduxjs/toolkit react-redux 创建一个 store文件夹,里面创建index.js文件和子模块文件夹 index,js文件写入以下代码 import {configureStore} from reduxjs/toolkit // 导入子模块 import counterReducer from ./modules/one import two from ./modules/tw…

OpenBayes 在线教程|张国荣、鲁迅等老照片秒变高清!即刻上手的超火 SUPIR-AI 图像修复教程

小伙伴们,大家在生活中是不是也会遇到这样的烦恼:心心念念想要打印一张充满回忆的老照片或酷炫动漫壁纸,却发现图像糊得像打了马赛克? 市面上的图像修复工具五花八门,选择困难症人群找得快要崩溃? 终于找…

Linux: softirq 简介

文章目录 1. 前言2. softirq 实现2.1 softirq 初始化2.1.1 注册各类 softirq 处理接口2.1.2 创建 softirq 处理线程 2.2 softirq 的 触发 和 处理2.1.1 softirq 触发2.1.2 softirq 处理2.1.2.1 在 中断上下文 处理 softirq2.1.2.2 在 ksoftirqd 内核线程上下文 处理 softirq 3.…

电子烟特效音语音方案选型-WTN6020-8S-E

随着科技的迅猛进步,电子烟行业亦在持续创新与突破,引领着全新的潮流。其中,电子烟产品所特有的吸烟声音特效播报功能,无疑成为了技术革新的璀璨亮点。这一设计巧妙地将吸烟的声效融入使用体验中,使得用户在吸电子烟时…

CSS3 立体 3D 变换

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 ✍CSS3 立体 3D 变换💎1 坐标轴💎2 perspective 透视视…

linux管理进程

一、程序 程序:执行特定任务的一串代码 1.是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具 2.用于描述进程要完成的功能,是控制进程执行的指令集 二、进程和线程 1.进程 进程是程序的执行…

vue2 二次封装element 组件,继承组件原属性,事件,插槽 示例

测试页面代码 这里主要记录如何封装element的el-input 并且封装后具有el-input原本的属性 事件 插槽 下面为测试页面即组件调用 <script> import CustomInput from /components/CustomInput.vue;export default {name: TestPage,components: { CustomInput },data() …

jenkins构建微信小程序并展示二维码

测试小程序的过程中&#xff0c;很多都是在回头和前端开发说一句&#xff0c;兄弟帮我打一个测试版本的测试码&#xff0c;开发有时间的情况下还好&#xff0c;就直接协助了&#xff0c;但是很多时候他们只修复了其中几个bug&#xff0c;其他需要修复的bug代码正在编写&#xf…