【JavaSE】搞定String类

news2024/11/28 0:42:03

前言

本篇会细致讲解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());//6

        String str2=null;
        System.out.println(str2);//null
        System.out.println(str1.length());//空指针异常

        String str3="";
        System.out.println(str3.length());//0
        System.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.coloradmin.cn/o/1599503.html

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

相关文章

赢战2024!炼石天津落地暨开年冲锋启动会圆满成功

天津,因河而生,凭海而兴,京杭大运河穿城而过,黄崖关长城迤逦壮观。2024年3月8日,“炼石天津落地暨开年冲锋启动会”在天津圆满成功举行,天津天开发展集团有限公司、中国电信股份有限公司天津分公司、中国联…

LeetCode 94 二叉树的中序遍历

题目描述 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root [] 输出:[]示例 3: 输入…

微信小程序-长按显示,点击空白区域关闭

<view bind:tap"closeLongAction"><view bind:longpress"openAction></view><view wx:if"{{longActionIsShow}}"> 长按显示的区域 </view> </view>openAction(e) {console.log(322,e);this.setData({longActionI…

Python疑难杂症(17)---介绍Python的pandas模块特点、安装以及series的创建和元素值的获取等。对于一维数据和使用有了初步的概念

1、定义 什么是Pandas&#xff1a;Pandas是Python中用于数据分析和挖掘的基础模块&#xff0c;它提供了丰富的功能和方法&#xff0c;使用 Pandas 包可以完成数据读入、数据清洗、数据准备、图表呈现等内容&#xff0c;使普通的非数据专业人员也能够处理和分析大型数据集&…

多传感器时间序列信号的无监督深度异常检测

论文地址&#xff1a;https://ieeexplore.ieee.org/abstract/document/9507359 论文源码&#xff1a;未开源 期刊&#xff1a;IEEE Transactions on Knowledge and Data Engineering 如今&#xff0c;多传感器技术被应用于许多领域&#xff0c;如医疗保健(HC)、人体活动识别(…

二.吊打面试官系列-数据库优化-Explain索引分析

1.如何定位慢SQL 我们知道数据库瓶颈80%都在查询上&#xff0c;数据库优化有一个比较重要的环节就是定位系统中的慢SQL&#xff0c;那么我们如何快速定位到哪些查询语句比较耗时呢&#xff1f;Mysql有自己的慢SQL定位功能 MySQL的慢查询日志&#xff0c;用来记录在MySQL中响应…

Postman 环境变量配置初始调用登录脚本赋值Token

效果 新建环境 切换 Environments 标签下 点击上面加号增加环境变量 使用环境变量 使用{{变量名}}引用变量使用 Pre-request Script 全局 一般授权接口都需要再调用接口前&#xff0c;进行登录授权&#xff0c;这里使用了全局的请求前脚本调用。 脚本示例 // 基础地址 var…

【火猫TV】NBA:赛季数据王总结,国王双雄爆冷入选

NBA常规赛已经全部结束,各项数据王诞生,我们发现不少新人球星开始挑大梁,他们用出色的发挥证明了自己的实力。下面,为大家简单盘点下各项数据的最佳球员! 得分王:东契奇(场均33.9分) 本赛季独行侠低开高走,东契奇保持了出色发挥,他场均贡献33.9分,比第二的字母哥场均多出3.5分…

CAN网络管理(网络节点)

什么是CAN的网络节点 网络节点是指连接到CAN总线上的设备或模块,每个网络节点都具有唯一的标识符,称为节点ID,用于在CAN总线上进行通信和识别。 如何判断CAN的网络节点是多少 可以根据DBC来定义查看, 以ADCU为例,域控作为主节点,一般外部的像雷达,camera的数据都是向…

Tomcat下载配置地址

IntelliJ IDEA是一个强大的集成开发环境&#xff0c;能够大大简化Java应用程序的开发和部署过程。而Tomcat作为一个流行的Java Web服务器&#xff0c;其与IntelliJ IDEA的整合能够提供便捷的开发环境&#xff0c;让开发人员更专注于代码的创作与优化。 在配置IntelliJ IDEA以使…

鸿蒙应用开发之滑动选择组件

前面学习了下拉选择菜单组件,现在来学习滑动选择组件,它是提供快速调节设置值,如音量调节、亮度调节等应用场景。也就是说,这个组件可以通过滑动条来设置对应的数值,而不需要用户手动输入数字。 比如像下面的界面: 可以用手滑动上面的滑块,就可以调节对应的数字。这个组…

OpenHarmony轻量系统开发【7】驱动之I2C显示OLED屏幕

7.1实验效果 Hispark WiFi开发套件又提供一个oled屏幕&#xff0c;但是鸿蒙源码中没有这个屏幕的驱动&#xff0c;我们需要自己去移植。 以下是移植效果&#xff1a; 接口&#xff1a;I2C 使用引脚&#xff1a;HI_IO_NAME_GPIO_13 、 HI_IO_NAME_GPIO_14 7.2代码 这里我直…

Webrtc 信令服务器实现

webrtc建联流程图 由上图可知&#xff0c;所谓的信令服务器其实就是将peer的offer/candidate/answer传给对端而已。这样的话实现方式就有很多种了&#xff0c;目前普遍的方式HTTP/HTTPS&#xff0c;WS/WSS。像webrtc-demo-peerconnection就是实现HTTP这种方式。本文使用WS&…

微信小程序订阅消息授权弹窗问题整理

文档 小程序订阅消息&#xff08;用户通过弹窗订阅&#xff09;开发指南 | 微信开放文档 1.报错10004 errCode: 10004errMsg: "requestSubscribeMessage:fail Invalid template id" 真机调试也不行 wx.requestSubscribeMessage({tmplIds: result,// 用户同意与否…

天池酒瓶瑕疵检测数据集分析及完整baseline

以下内容为还没思路的小伙伴牵个头提供一个demo,大佬勿喷,线上成绩0.7,留空间给小伙伴们发挥自己的力量 ps:markdown不怎么熟悉,代码中如有明显缩进问题,自行斟酌改正,编辑好几次都改不过来,请原谅.... 数据分析瑕疵大类: 瓶盖瑕疵、标贴瑕疵、喷码瑕疵、瓶身瑕疵、酒液瑕疵瑕…

【canvas】canvas基础使用(九):文本绘制

简言 canvas除了能够绘制图形外&#xff0c;也可以绘制文本。 绘制文本 fillText() 填充文本 CanvasRenderingContext2D 对象的方法 fillText() 是 Canvas 2D API 的一部分&#xff0c;它在指定的坐标上绘制文本字符串&#xff0c;并使用当前的 fillStyle 对其进行填充。存…

ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写教程

原文链接&#xff1a;ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601506&idx2&sn5dae3fdc3e188e81b8a6142c5ab8c994&chksmfa820c85cdf58593356482880998fc6eb98e6889b261bf62…

如何解决DDoS攻击?

DDoS攻击&#xff08;分布式拒绝服务攻击&#xff09;是一种恶意利用多台傀儡机协同发起大规模网络流量&#xff0c;旨在压垮目标系统或网络资源&#xff0c;使其无法正常服务的网络攻击手段。由于现代计算机和网络性能的提升&#xff0c;单点发起的DoS攻击已难以奏效&#xff…

基于ssm缪斯乐器购物网站的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本缪斯乐器购物网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

DNF手游攻略:萌新入坑大全!

玩DNF手游国服已经正式定档&#xff0c;离上线已经越来越近了&#xff0c;很多小伙伴对于装备打造以及附魔还不是特别了解。如果你还不知道装备要怎么附魔&#xff0c;不要担心&#xff0c;本篇攻略将为你全面解析全职业过渡和毕业附魔推荐。 ​ 一、物理职业附魔推荐 1. 武器…