【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
- 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
- 如果前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);}
结果
注意:
- 字符"|","*","+"都得加上转义字符,前面加上 "\\" .
- 而如果是 "\" ,那么就得写成 "\\\\" .
- 如果一个字符串中有多个分隔符,可以用"|"作为连字符.
代码示例
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未采用同步处理,属于线程不安全操 作。
相关文章:

【JavaSE】搞定String类
前言 本篇会细致讲解String类的常见用法,让小伙伴们搞定String类~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 常用的三种字符串构造 字符串长度length 字符串比较 比较 比较字符串的内容equals…...

数字乡村创新实践探索农业现代化与农村治理现代化新路径:科技赋能农村全面振兴与农民幸福生活
目录 引言 一、数字乡村与农业现代化 1、智慧农业技术的应用 2、农业产业链的数字化转型 二、数字乡村与农村治理现代化 1、农村信息化水平的提升 2、农村治理模式的创新 三、科技赋能农村全面振兴与农民幸福生活 1、提升农业生产效益与农民收入 2、促进农村产业结构…...
【从零开始手搓12306项目】四、12306是如何成为全球最忙碌的网站之一?
4.1 12306有多忙碌 一天的请求量大概1600亿,平均180万/秒(二八理论:20%的事件产生80%的请求),不适合二八理论,因为12306分时间放票 平均一年售出30亿张,高峰期日售票能力达到了2000万张 高峰期…...

WebKit简介及工作流程
文章目录 一、WebKit简介二、WebKit结构三、Webkit工作流程四、WebKit常见问题五、WebKit优点六、相关链接 一、WebKit简介 WebKit是一个开源的浏览器引擎,它的起源可以追溯到2001年,当时苹果公司推出了其首款基于Unix的操作系统Mac OS X。在2002年&…...

软考-系统集成项目管理中级--进度管理(输入输出很重要!!!本章占分较高,着重复习)
本章历年考题分值统计(16年11月及以后按新教材考的) 本章重点常考知识点汇总清单(学握部分可直接理解记忆) 12、参数估算:参数估算是一种基于历史数据和项目参数,使用某种算法来计算成本或持续时间的估算技术。参数估算是指利用历史数据之间的统计关系和…...

AndroidAutomotive模块介绍(一)整体介绍
前言 Android Automotive 是一个基本 Android 平台,可运行 IVI 系统中预安装的 Android 应用以及可选的第二方和第三方 Android 应用。 本系列文档将会系统的介绍 Android Automotive 的功能、架构、逻辑等。模块逻辑将从 应用api接口、系统服务、底层服务&#x…...

【开发问题记录】Nacos修改服务实例权重时报错
问题记录 一、问题描述1.1 产生原因1.2 产生问题 二、问题解决2.1 docker部署的nacos解决方案2.1.1 进入nacos容器2.1.2 查看当前目录2.1.3 进入data文件夹2.1.4 删除protocol文件2.2 本地部署的nacos 一、问题描述 1.1 产生原因 在运行项目时,在本地启动了一个服务…...

高级IO和5种IO模型
目录 1. 高级IO1.1 IO的基本概念1.2 OS如何得知外设当中有数据可读取1.3 OS如何处理从网卡中读取到的数据包1.4 IO的步骤 2. 五种IO模型2.1 利用钓鱼来理解2.2 阻塞IO2.3 非阻塞IO2.4 信号驱动IO2.5 IO多路转接2.6 异步IO 3. 高级IO的概念3.1 同步通信 VS 异步通信3.2 阻塞 VS …...

OpenHarmony轻量系统开发【7】驱动之I2C显示OLED屏幕
7.1实验效果 Hispark WiFi开发套件又提供一个oled屏幕,但是鸿蒙源码中没有这个屏幕的驱动,我们需要自己去移植。 以下是移植效果: 接口:I2C 使用引脚:HI_IO_NAME_GPIO_13 、 HI_IO_NAME_GPIO_14 7.2代码 这里我直…...
C#:循环中断
任务描述 实现九九乘法表,按照编程要求,使用break跳出循环 测试说明 测试过程: 平台将编译用户补全代码,并根据程序的输出判断程序是否正确。 以下是测试样例: 测试输入: 预期输出: we found…...

34. UE5 RPG实现鼠标点击移动
在前面,我们实现过使用键盘按键wasd去实现控制角色的移动,现在,我们实现了InputAction按键触发,后面,实现一下通过鼠标点击地面实现角色移动。 我们将实现两种效果的切换,如果你点击地面快速松开࿰…...

《二》Qt Creator工具介绍与使用
一、关于界面 点击文件--->新建文件或项目会出现如下图: 我们选择第一个 点击下一步下一步: 继续下一步直到结束: 二,具体文件介绍 我们点击pro查看以下 QT core gui第1行 表示使用qt的core和gui库,如果以后…...
20240415金融读报:市场信贷不能过于宽松声音碳领域新增文件
1、市场普遍认为,在经济转型背景下,当前的社会融资规模和信贷增长有助于经济高质量发展,过于宽松并不利于经济发展。(已经有这个声音了,是不是说明我们已经脱离了U型曲线的最低点,在或快接近其后半段的1/2处…...
2024年第十五届蓝桥杯研究生组题目总结(Java、Python、C++)
2024年十五届蓝桥杯研究生组 今年的题较去年难度降低了很多,题量也少了2道。 Q1 劲舞团 读文件,找到最长的满足条件的子数组的长度 答案是:9 BufferedReader,fopen,open Q2 召唤数学精灵 找规律,周期…...

MindOpt APL向量化建模语法的介绍与应用(2)
前言 在数据科学、工程优化和其他科学计算领域中,向量和矩阵的运算是核心组成部分。MAPL作为一种数学规划语言,为这些领域的专业人员提供了强大的工具,通过向量式和矩阵式变量声明以及丰富的内置数学运算支持,大大简化了数学建模…...

深入理解图形处理器(GPU):加速人工智能和大数据计算的引擎
文章目录 1. 什么是GPU?2. GPU的工作原理3. GPU的应用领域4. GPU与CPU的比较参考与推荐 前言: 图形处理器(GPU)不再仅仅是用于图形渲染的硬件设备。如今,GPU已经成为加速人工智能、大数据计算和科学研究的关键引擎。本…...

【Java探索之旅】数组使用 初探JVM内存布局
🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、数组的使用1.1 元素访问1.2 数组遍历 二、JVM的内存布局🌤️全篇总结 …...

RabbitMQ消息模型之Simple消息模型
simple消息模型 生产者 package com.example.demo02.mq.simple;import com.example.demo02.mq.util.ConnectionUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection;import java.io.IOException;/*** author Allen* 4/10/2024 8:07 PM* versi…...

设计模式系列:简单工厂模式
作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS二次开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 目录 定义 特点 使用场景 优缺点 (1) 优点…...
解决 windows+Ubuntu 时间不同步问题
本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 如果你的电脑装了 Windows Ubuntu 系统,肯定会遇到时间不同步的问题。那么如何解决呢?参考步骤如下: # 步骤一:进入到 Ubuntu 系统# 步骤二:执行如下三条命令即可 sud…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
shell脚本质数判断
shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数)shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数) 思路: 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...