String类常用方法总结

目录
一.简单认识String
二.String对象的比较
1.equals
内部实现原理:
2.compareTo
3.compareToIgnoreCase
三.字符串查找
示例:
四.字符串与其他类型转化
1.数值和字符串相互转换
2.大小写相互转化
3.字符串转数组
4.格式化转化
五.字符串替换
全部替换
部分替换
六.字符串拆分
全部拆分
部分拆分
特殊拆分
七.字符串的截取
全部截取
部分截取
一.简单认识String
常见的初始化一个字符串有以下几个方式:
public static void main(String[] args) {// 使用常量串构造String s1 = "hello world";System.out.println(s1);// 直接newString对象String s2 = new String("hello world");System.out.println(s1);// 使用字符数组进行构造char[] array = {'h','e','l','l','o','w','o','r','l','d'};String s3 = new String(array);System.out.println(s1);}
String是引用类型,内部并不存储字符串本身


二.String对象的比较
对于内置类型,==比较的是变量中的值;对于引用类型==比较的是引用中的地址,因此我们在对比俩个字符串的时候是不能直接用等号去判断的,在这里有以下三种方法最为常用
1.equals
boolean equals(Object anObject) 是按照字符大小的顺序来比较
内部实现原理:
public boolean equals(Object anObject){// 1. 先检测this 和 anObject 是否为同一个对象比较,如果是返回trueif (this == anObject) {return true;}// 2. 检测anObject是否为String类型的对象,如果是继续比较,否则返回falseif (anObject instanceof String) {// 将anObject向下转型为String类型对象String anotherString = (String) anObject;int n = value.length;// 3. this和anObject两个字符串的长度是否相同,是继续比较,否则返回falseif (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;// 4. 按照字典序,从前往后逐个字符进行比较while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}
public static void main(String[] args) {String s1 = new String("hello");String s2 = new String("hello");String s3 = new String("Hello");// s1、s2、s3引用的是三个不同对象,因此==比较结果全部为falseSystem.out.println(s1 == s2); // falseSystem.out.println(s1 == s3); // false// equals比较:String对象中的逐个字符// 虽然s1与s2引用的不是同一个对象,但是两个对象中放置的内容相同,因此输出true// s1与s3引用的不是同一个对象,而且两个对象中内容也不同,因此输出falseSystem.out.println(s1.equals(s2)); // trueSystem.out.println(s1.equals(s3)); // false}
2.compareTo
int compareTo(String s) 与equals不同的是,equals返回的是boolean类型,而compareTo返回的是int类型,compareTo返回的是字符串的差值: 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值,如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值
public static void main(String[] args) {String s1 = new String("abc");String s2 = new String("ac");String s3 = new String("abc");String s4 = new String("abcdef");System.out.println(s1.compareTo(s2)); // 不同输出字符差值-1System.out.println(s1.compareTo(s3)); // 相同输出 0System.out.println(s1.compareTo(s4)); // 前k个字符完全相同,输出长度差值 -3}
3.compareToIgnoreCase
int compareToIgnoreCase(String str) 与compareTo方式相同,但是忽略大小写比较
public static void main(String[] args) {String s1 = new String("abc");String s2 = new String("ac");String s3 = new String("ABc");String s4 = new String("abcdef");System.out.println(s1.compareToIgnoreCase(s2)); // 不同输出字符差值-1System.out.println(s1.compareToIgnoreCase(s3)); // 相同输出 0System.out.println(s1.compareToIgnoreCase(s4)); // 前k个字符完全相同,输出长度差值 -3}
三.字符串查找
字符串查找也是字符串中非常常见的操作,String类提供的常用查找的方法:
| 方法 | 功能 |
| char charAt (int index) | 返回 index 位置上字符,如果 index 为负数或者越界,抛出 IndexOutOfBoundsException 异常 |
| int indexOf (int ch) | 返回 ch 第一次出现的位置,没有返回 -1 |
| int indexOf (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 = "aaabbbcccaaabbbccc";System.out.println(s.charAt(3)); // 'b'System.out.println(s.indexOf('c')); // 6System.out.println(s.indexOf('c', 10)); // 15System.out.println(s.indexOf("bbb")); // 3System.out.println(s.indexOf("bbb", 10)); // 12System.out.println(s.lastIndexOf('c')); // 17System.out.println(s.lastIndexOf('c', 10)); // 8System.out.println(s.lastIndexOf("bbb")); // 12System.out.println(s.lastIndexOf("bbb", 10)); // 3}
四.字符串与其他类型转化
1.数值和字符串相互转换
可以使用 valueOf 方法将数值转化为字符串
class Student {String name;int age;public Student(String name, int age) {this.name = name;this.age = age;}
}public static void main(String[] args) {// 数字转字符串String s1 = String.valueOf(1024);String s2 = String.valueOf(12.24);String s3 = String.valueOf(true);String s4 = String.valueOf(new Student("张三", 18));System.out.println(s1);System.out.println(s2);System.out.println(s3);System.out.println(s4);}
我们想将整形的双精度浮点型的数值转化为字符串就使用它的包装类 Integer、Double 以及相对应的方法
public static void main(String[] args) {// 字符串转数字int data1 = Integer.parseInt("1024");double data2 = Double.parseDouble("10.24");System.out.println(data1);System.out.println(data2);}
2.大小写相互转化
- 小写转大写: toUpperCase
- 大写转小写: toLowerCase
public static void main(String[] args) {String s1 = "hello";String s2 = "HELLO";// 小写转大写System.out.println(s1.toUpperCase());// 大写转小写System.out.println(s2.toLowerCase());}
3.字符串转数组
可以使用 toCharArray 方法来将字符串转化为字符数组
public static void main(String[] args) {String s = "hello";// 字符串转数组char[] ch = s.toCharArray();for (int i = 0; i < ch.length; i++) {System.out.print(ch[i]);}System.out.println();// 数组转字符串String s2 = new String(ch);System.out.println(s2);}
4.格式化转化
使用 format 方法可以帮助我们将带有格式的字段转化为字符串
public static void main(String[] args) {String s = String.format("%d-%d-%d", 2023, 11, 23);System.out.println(s);}
五.字符串替换
Java允许我们使用一段字符串替换掉原有字符串中的部分字段,我们可以有以下俩种方式
全部替换
我们可以使用 replaceAll 方法,该方法允许我们将整个字符串中选中的部分全部替换
public static void main(String[] args) {String str1 = "helloworld" ;System.out.println(str1.replaceAll("l", "_"));}
部分替换
我们可以使用 replaceFirst 方法来将字符串中首个出现的选中的字符进行替换
public static void main(String[] args) {String str2 = "helloworld" ;System.out.println(str2.replaceFirst("l", "_"));}
注意事项: 由于字符串是不可变对象, 替换不修改当前字符串, 而是产生一个新的字符串
六.字符串拆分
Java中也允许我们全部拆分字符串或者部分拆分字符串
全部拆分
我们可以使用 split 方法来做到全部拆分
public static void main(String[] args) {String str = "hello world hello friend" ;String[] result = str.split(" ") ; // 按照空格拆分for(String s: result) {System.out.println(s);}}
部分拆分
我们可以使用 split 方法来做到部分拆分,只需要再额外传入一个参数就可以,我们在第二个参数传入多少就会被分成多少分,默认从左往右分
public static void main(String[] args) {String str = "hello world hello friend" ;String[] result = str.split(" ",2) ;for(String s: result) {System.out.println(s);}}
特殊拆分
拆分是特别常用的操作,另外有些特殊字符作为分割符可能无法正确切分,需要加上转义,比如我们这里的 “ . ” 在正常情况下是无法识别的,需要加转义符
public static void main(String[] args) {String str = "192.168.1.1" ;String[] result = str.split("\\.") ;for(String s: result) {System.out.println(s);}}
注意事项:
- 字符" | "," * "," + "都得加上转义字符,前面加上 " \\ "
- 而如果是 " \ " ,那么就得写成 " \\\\ "
- 如果一个字符串中有多个分隔符,可以用 " | " 作为连字符
示例:
public static void main(String[] args) {String str = "name=zhangsan&age=18" ;String[] result = str.split("&") ;for (int i = 0; i < result.length; i++) {String[] temp = result[i].split("=") ;System.out.println(temp[0]+" = "+temp[1]);}}
七.字符串的截取
Java允许我们从一个完整的字符串之中截取出部分
全部截取
我们可以使用 substring 方法从我们指定的索引截取到结尾
public static void main(String[] args) {String str = "helloworld";System.out.println(str.substring(5));}
部分截取
我们可以使用 substring 方法加上一个参数后,只截取一部分内容
public static void main(String[] args) {String str = "helloworld";System.out.println(str.substring(0, 5));}
其中需要注意:索引从0开始,并且是属于前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标
本次的分享就到此为止了,希望我的分享能给您带来帮助,也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!
如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!
有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见!
相关文章:
String类常用方法总结
目录 一.简单认识String 二.String对象的比较 1.equals 内部实现原理: 2.compareTo 3.compareToIgnoreCase 三.字符串查找 示例: 四.字符串与其他类型转化 1.数值和字符串相互转换 2.大小写相互转化 3.字符串转数组 4.格式化转化 五.字符串…...
TensorFlow实战教程(二十八)-Keras实现BiLSTM微博情感分类和LDA主题挖掘分析
从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章通过Keras深度学习构建CNN模型识别阿拉伯手写文字图像,一篇非常经典的图像分类文字。这篇文章将结合文本挖掘介绍微博情感分类知识,包括数据预处理、机器学习和深度学习的情感分类,后续结…...
个人博客添加访问人数以及访问时间-githubpage
layout: post # 使用的布局(不需要改) title: 个人博客添加访问人数以及访问时间 # 标题 subtitle: 个人博客优化 #副标题 date: 2023-11-18 # 时间 author: BY ThreeStones1029 # 作者 header-img: img/about_bg.jpg #这篇文章标题背景图片 catalog: tr…...
Django--重定向redirect
在 Django 中,redirect 是一个用于进行重定向的函数。它允许你将用户从一个 URL 重定向到另一个 URL,通常用于处理表单提交、用户登录、用户注册等操作后的页面跳转。redirect 函数属于 django.shortcuts 模块。 以下是 redirect 函数的基本用法和一些参…...
在html和css中的引用svg(一)
问题:如何让 DIV 中的svg垂直居中? HTML 代码: <div class"content"><svg ...> ... </svg></div> CSS代码: .content svg { vertical-align: middle;} 实用扩展:如何让 DIV 中…...
C/C++ 实现:自然排序:针对两个需要排序的字符串,不仅逐个比较每个字符的顺序,对于连在一起的数字字符会作为一个完整数字进行比较 某知名企业的笔试题
目录 题目描述: 分析: 代码实现: 完整代码: 运行结果: 题目描述: 下面是一个自然排序函数的声明,请实现该函数; 自然排序是指:针对两个需要排序的字符串,不仅逐个比较每个...
sse实时通信
使用原因:用户网络环境较差,之前使用ws总是出现断连重连,导致数据总是不能实时更新,所以更换为sse npm install event-source-polyfill createWebSocket:创建sse连接 getWebSocketMsg:接收sse消息 impo…...
Qt专栏3—Qt项目创建Hello World
setp1 打开软件 双击Qt Creator 11.0.3 (Community),打进入软件界面 step2 创建项目 点击创建项目 step3 选择模板 选着Application(Qt)->Qt Widgets Application setp4 设置项目 名称中填入项目号名,创建路径中填入项目保存位…...
linux输出的重定向无效问题和解决
我们在调试程序或者打印日志时经常会遇到重定向的问题,而有时候会遇到重定向无效的问题,下面给一个简单的例子,首先写一个简单的test.c #include <stdio.h>int main(){fprintf(stdout, "hello\n");fprintf(stderr, "world\n");return 0; }编译生…...
chromium114添加新的语言国际化支持
一、需求说明 需要chromium114支持新语言体系,例如藏语,蒙古语,苗语等 二、操作步骤 1. build/config/locales.gni修改 在all_chrome_locales变量中添加新的语种标识,如下图。 2. 添加编译文件,告诉浏览器在编译时需要加载和输出那些文件 尝试编译出现错误一提示。需要…...
赛氪荣幸受邀参与中国联合国采购促进会第五次会员代表大会
11 月21 日 (星期二) 下午14:00,在北京市朝阳区定福庄东街1号中国传媒大学,赛氪荣幸参与中国联合国采购促进会第五次会员代表大会。 2022年以来,联合国采购杯全国大学生英语大赛已经走上了国际舞台,共有来自…...
车载通信架构 —— 传统车内通信网络发展回顾
车载通信架构 —— 传统车内通信网络发展回顾 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何…...
`maven.test.skip` 和 `skipTests` 的区别
maven.test.skip 和 skipTests 的区别 -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。 -Dmaven.test.skiptrue,不执行测试用例,也不编译测试用例类。...
linux输出的重定无效问题和解决
我们在调试程序或者打印日志时经常会遇到重定向的问题,而有时候会遇到重定向无效的问题,下面给一个简单的例子,首先写一个简单的test.c #include <stdio.h>int main(){fprintf(stdout, "hello\n");fprintf(stderr, "world\n");return 0; }编译生…...
开发上门按摩系统对技师如何管理,薪资结构怎么设计
开发完上门按摩系统平台上线之后,对技师的管理和薪资结构是非常重要的环节,关乎着平台的服务能力和服务质量,那么应该如何去管理和设计薪资结构呢 首先说技师管理: 一、培训和认证:平台应对技师进行全面的培训…...
云HIS系统源码,医院管理系信息统源码,融合B/S版四级电子病历系统
医院管理信息系统是以推进公共卫生、医疗、医保、药品、财务监管信息化建设为着力点,整合资源,加强信息标准化和公共服务信息平台建设,逐步实现统一高效、互联互通的管理系统。 SaaS模式Java版云HIS系统,在公立二甲医院应用三年…...
Redis篇---第十篇
系列文章目录 文章目录 系列文章目录前言一、怎么提高缓存命中率?二、Redis 如何解决 key 冲突?三、Redis 报内存不足怎么处理? 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分…...
(vue)前后端配合实现文件预览功能
(vue)前后端配合实现文件预览功能 1.页面: 2.后台返回数据: 3.预览效果: 4.代码: <el-descriptions-item><template slot"label">文件名称</template><el-button type"text" click"…...
.NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !背景介绍 突然闯到路径搜索算法里…...
SQL Server删除重复数据只保留一条
介绍 最近在导入数据库数据, 有时候给的数据源文件,存在重复数据, 需要清除但是还需要保留一条记录的需求. 本文将介绍如何使用SQL Server来实现这个需求。 流程 下面是实现删除重复数据的流程,我们可以用表格展示每个步骤: 步骤 描述 步骤一 先…...
ARM1136JF-S调试单元架构与实战应用解析
1. ARM1136JF-S调试单元架构解析ARM1136JF-S处理器的调试单元是嵌入式系统开发中不可或缺的核心组件,它为开发者提供了强大的实时监控和状态修改能力。这个基于IEEE标准测试访问端口和边界扫描架构的调试系统,通过精心设计的硬件机制与软件接口的配合&am…...
MTKClient终极指南:联发科设备底层调试与救砖完整解决方案
MTKClient终极指南:联发科设备底层调试与救砖完整解决方案 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient MTKClient是一款专为联发科芯片设备设计的开源调试工具,能…...
AI驱动Premiere Pro:基于MCP协议的自然语言视频剪辑自动化实践
1. 项目概述:一个为创意工作者量身打造的AI助手如果你是一名视频剪辑师、内容创作者,或者任何需要频繁与Adobe Premiere Pro打交道的创意工作者,那么你肯定对“重复劳动”深恶痛绝。每天,我们都在与时间线、素材箱、效果控件面板搏…...
抖音下载器:解放双手的自动化内容管理革命 [特殊字符]
抖音下载器:解放双手的自动化内容管理革命 🚀 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...
507-opencua tmux
Git Submodule深度避坑指南技术文章大纲 核心概念与基础原理 Submodule的定义与用途:嵌套仓库的依赖管理.gitmodules文件的作用与结构解析主仓库与子模块的版本关联机制 初始化与添加子模块的注意事项 git submodule add命令的参数详解(分支、路径、名称…...
Locale Remulator:告别游戏乱码,轻松切换系统语言环境
Locale Remulator:告别游戏乱码,轻松切换系统语言环境 【免费下载链接】Locale_Remulator System Region and Language Simulator. 项目地址: https://gitcode.com/gh_mirrors/lo/Locale_Remulator 你是否曾经遇到过这样的烦恼?下载了…...
在Node.js后端服务中集成Taotoken实现异步聊天补全功能
在Node.js后端服务中集成Taotoken实现异步聊天补全功能 本文面向Node.js开发者,介绍如何在后端服务中接入Taotoken平台,调用其提供的OpenAI兼容API来实现异步聊天补全功能。我们将从环境准备、SDK配置、基础调用到响应处理,逐步完成一个可运…...
ASUS Tinker Edge R开发板:边缘AI计算的硬件解析与实践
1. ASUS Tinker Edge R 开发板深度解析华硕Tinker Edge R是一款基于Rockchip RK3399Pro AI处理器的Pico-ITX规格单板计算机。这款开发板最初在2019年发布时配备了6GB内存,而近期新推出的3GB内存版本以更亲民的价格出现在市场上。作为一款面向AI加速工作负载设计的开…...
如何用MobileSAM与Inpaint-Anything实现高效图像修复:完整实战指南
如何用MobileSAM与Inpaint-Anything实现高效图像修复:完整实战指南 【免费下载链接】MobileSAM This is the official code for MobileSAM project that makes SAM lightweight for mobile applications and beyond! 项目地址: https://gitcode.com/gh_mirrors/mo…...
ShawzinBot深度解析:3个技巧让Warframe音乐演奏从新手变大师
ShawzinBot深度解析:3个技巧让Warframe音乐演奏从新手变大师 【免费下载链接】ShawzinBot Convert a MIDI input to a series of key presses for the Shawzin 项目地址: https://gitcode.com/gh_mirrors/sh/ShawzinBot 你是否曾经想在Warframe中演奏自己喜欢…...
