当前位置: 首页 > news >正文

【JavaSE】String类常用字符串方法总结

目录

1. length() 求字符串长度

2. isEmpty() 判断字符串是否为空

3. String对象的比较

3.1 equals() 判断字符串是否相同

 3.2 compareTo() 比较字符串大小

 3.3 compareToIgnoreCase 忽略大小写比较

4. 字符串查找

4.1 charAt() 返回指定索引处的字符

4.2 indexOf() 

4.2.1 参数只有一个的时候

4.2.2 有两个参数的时候

4.3 lastIndexOf()

4.3.1 参数只有一个的时候

4.3.2 有两个参数的时候

5. 转化

5.1 数值和字符串转化

5.1.1 数字转字符串 valueof()

5.1.2 valueOf() 的其他用法

5.1.3 字符串转数字

5.2 大小写转换

5.2.1 toUpperCase() 小写转大写

5.2.2 toLowerCase() 大写转小写

5.3 字符数组转字符串

5.4 toCharArray() 字符串转数组

5.5 format() 格式化

6.字符串替换

6.1 replaceFirst()

6.2 replaceAll()

6.3 replace()

7. split() 字符串拆分

8. substring() 字符串截取

9. trim() 去掉字符串中的左右空格,保留中间空格


1. length() 求字符串长度

返回值

返回该对象表示的字符序列的长度。

代码示例:

String str1 = "hello";
String str2 = "Hello world";
String str3 = "";
System.out.println(str1.length());
System.out.println(str2.length());
System.out.println(str3.length());

输出结果:

2. isEmpty() 判断字符串是否为空


返回值

字符串长度为0的时候返回 true,否则返回 false

代码示例:

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

输出结果:

3. String对象的比较

3.1 equals() 判断字符串是否相同

作用

将此字符串与指定对象进行比较。 其结果是true当且仅当该参数不是null并且是String对象,表示相同的字符序列作为该对象。

返回值

如果给定的对象代表一个String等效于这个字符串为true, 否则为false。

代码示例:

String str1 = "hello";
String str2 = "hello";
String str3 = "world";
System.out.println(str1.equals(str2));
System.out.println(str1.equals(str3));

输出结果:

 3.2 compareTo() 比较字符串大小


返回值:

compareTo 方法的返回值是一个整数,它反映了两个字符串的字典顺序关系,具体规则如下:

  • 如果调用该方法的字符串(即当前字符串)在字典顺序小于参数字符串,则返回一个整数。

  • 如果两个字符串相等,则返回 0

  • 如果调用该方法的字符串在字典顺序大于参数字符串,则返回一个整数。

代码示例:

String str1 = "abc";
String str2 = "abc";
String str3 = "def";
System.out.println(str1.compareTo(str2));
System.out.println(str1.compareTo(str3));

输出结果:

 3.3 compareToIgnoreCase 忽略大小写比较


 与compareTo方式相同,但是忽略大小写比较

代码示例:

String str1 = "hello";
String str2 = "Hello";
String str3 = "abcde";
System.out.println(str1.compareToIgnoreCase(str2));
System.out.println(str1.compareToIgnoreCase(str3));

输出结果:

4. 字符串查找

字符串查找也是字符串中非常常见的操作,String类提供的常用查找的方法:

4.1 charAt() 返回指定索引处的字符

作用

返回位于指定索引位置的字符,索引范围0至length() - 1 。例如对于字符串"hello"charAt(1)将返回字符'e'

代码示例:

String str1 = "hello";
System.out.println(str1.charAt(0));
System.out.println(str1.charAt(1));
System.out.println(str1.charAt(2));
System.out.println(str1.charAt(3));
System.out.println(str1.charAt(4));

输出结果:

4.2 indexOf() 

4.2.1 参数只有一个的时候

作用 

返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回-1

代码示例:

String str1 = "ababcab";
int index1 = str1.indexOf("abc");
int index2 = str1.indexOf("ab");
int index3 = str1.indexOf('b');
int index4 = str1.indexOf("c");
System.out.println(index1);
System.out.println(index2);
System.out.println(index3);
System.out.println(index4);

输出结果:

4.2.2 有两个参数的时候

作用

指定的下标开始搜索,返回指定字符(或字符串)第一次出现在字符串内的下标

代码示例:

String str1 = "ababcab";
int index1 = str1.indexOf("ab",4);//从str1中下标4位置开始查找
int index2 = str1.indexOf('b',2); //从str1中下标2位置开始查找
System.out.println(index1);
System.out.println(index2);

输出结果:

4.3 lastIndexOf()

4.3.1 参数只有一个的时候

作用 

 从后往前找,返回指定字符(或字符串)第一次出现的位置没有返回-1

4.3.2 有两个参数的时候

作用 

 从fromIndex位置开始找,从后往前找指定字符(或字符串)第一次出现的位置没有返回-1

代码示例:

String str1 = "ababcababcd";
int index1 = str1.lastIndexOf("abc");
int index2 = str1.lastIndexOf("abc",5); //从5位置倒着往回找
int index3 = str1.lastIndexOf('c');
int index4 = str1.lastIndexOf('c',5);//从5位置倒着往回找
System.out.println(index1);
System.out.println(index2);
System.out.println(index3);
System.out.println(index4);

 输出结果:

5. 转化

5.1 数值和字符串转化

5.1.1 数字转字符串 valueof()

valueOf的部分重载方法 

这些方法都是将数字转化成字符串。

代码示例:

String str1 = String.valueOf(1234);
String str2 = String.valueOf(3.14);
System.out.println(str1);
System.out.println(str2);

输出结果:

5.1.2 valueOf() 的其他用法

使用一:

作用

返回 Object参数的字符串形式。

使用二:

作用

返回将char型的字符数组转化为字符串后的形式

使用三:

作用

如果参数为true ,则返回等于"true"的字符串; 否则,等于一个字符串"false"返回。

使用四:

作用

返回 char参数的字符串形式。

5.1.3 字符串转数字

代码示例:

int data1 = Integer.parseInt("1234");
double data2 = Double.parseDouble("12.34");
System.out.println(data1);
System.out.println(data2);

输出结果:

5.2 大小写转换

5.2.1 toUpperCase() 小写转大写


 代码示例:

String s1 = "hello";
String s2 = "Hello";
String ret1 = s1.toUpperCase();
String ret2 = s2.toUpperCase();
System.out.println(ret1);
System.out.println(ret2);

输出结果:

5.2.2 toLowerCase() 大写转小写


 代码示例:

String s1 = "HELLO";
String s2 = "Hello";
String ret1 = s1.toLowerCase();
String ret2 = s2.toLowerCase();
System.out.println(ret1);
System.out.println(ret2);

输出结果:

5.3 字符数组转字符串

代码示例:

char[] array1 = {'a','b','c'};
String str1 = new String(array1);
System.out.println(str1);

输出结果:

5.4 toCharArray() 字符串转数组

作用 

 将字符串转换为新的字符数组。

代码示例:

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

输出结果:

5.5 format() 格式化

使用指定的格式字符串和参数返回格式化的字符串。

代码示例:

String str = String.format("%d-%d-%d",2023,8,7);
System.out.println(str);

输出结果:

6.字符串替换

使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下:

6.1 replaceFirst()

参数

regex - 要匹配此字符串的正则表达式

replacement - 要替换第一个匹配的字符串

作用

1. 从原始字符串的开头开始,搜索并找到第一个与正则表达式匹配的子串。
2. 将该匹配项替换为指定的新字符串。
3. 返回替换后的新字符串。

代码示例:

String str = "abcd abcd abcd";
String ret1 = str.replaceFirst("ab","OO");
System.out.println(ret1);

输出结果:

6.2 replaceAll()

参数 

regex 参数是一个正则表达式,用于匹配原始字符串中的子串。

replacement 参数是要替换匹配项的新字符串。 

作用 

1. 从原始字符串的开头开始,搜索并找到所有与正则表达式匹配的子串。

2. 将每个匹配项都替换为指定的新字符串。

3. 返回替换后的新字符串。

代码示例:

String str = "abcd abcd abcd";
String ret1 = str.replaceAll("ab","OO");
System.out.println(ret1);

输出结果: 

需要注意的是,replaceAll方法使用的是正则表达式进行匹配,因此在使用时需要注意正则表达式的语法和特殊字符的转义。如果不需要使用正则表达式进行匹配,可以考虑使用replace方法来进行简单的字符串替换。

6.3 replace()

重载1

作用 

通过用 newChar 字符替换字符串中出现的所有 oldChar 字符,并返回替换后的新字符串。

重载2

将与字面目标序列匹配的字符串的每个子字符串替换为指定的字面替换序列。 替换从字符串开始到结束,例如,在字符串“aaa”中用“b”替换“aa”将导致“ba”而不是“ab”。

参数

target - 要替换的char值序列

replacement - char值的替换顺序

代码示例:

String str = "abcd abcd abcd";
String ret1 = str.replace("ab","OO");
String ret2 = str.replace('a','A');
System.out.println(ret1);
System.out.println(ret2);

输出结果:

7. split() 字符串拆分

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。 可用方法如下:

重载方法1:

作用

1. 从原始字符串中找到所有与分隔符匹配的子串,并根据分隔符将原始字符串分割成多个子串。
2. 将这些子串存储在一个字符串数组中。
3. 返回该字符串数组。

代码示例1:

String str = "hello abc world";
String[] ret = str.split(" ");
for (int i = 0; i < ret.length; i++) {System.out.println(ret[i]);
}

输出结果1:

 代码示例2:拆分IP地址

String str = "192.168.1.1";
String[] ret = str.split("\\.");
for (int i = 0; i < ret.length; i++) {System.out.println(ret[i]);
}

输出结果2:

代码示例:

String str = "name=zhangsan&age=10";
String[] ret = str.split("=|&"); //用=和&分割
for (int i = 0; i < ret.length; i++) {System.out.println(ret[i]);
}

输出结果3

注意事项:

1. 字符"|","*","+"都得加上转义字符,前面加上 "\\" 

2. 而如果是 "\\" ,那么就得写成 "\\\\" 

3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符

代码示例3: 多次拆分

 结果和上面输出结果3相似。

 重载方法2:

作用

1. 从原始字符串中找到与正则表达式匹配的子串。
2. 将原始字符串分割成多个子串,每个子串都保存在数组中。
3. 只保存前limit-1个子串,如果limit为负数或为零,则不限制分割数。
4. 将剩余的未分割的部分作为数组的最后一个元素保存。

代码示例:

String str = "hello abc world";
String[] ret = str.split(" ",2);//限制分割组数为2组
for (int i = 0; i < ret.length; i++) {System.out.println(ret[i]);
}

输出结果:

8. substring() 字符串截取

从一个完整的字符串之中截取出部分内容。可用方法如下:

代码示例:

String str = "abcdefg";
String ret1 = str.substring(0,3); //截取下标0~2字符串
String ret2 = str.substring(3); //截取下标3以后的字符串
System.out.println(ret1);
System.out.println(ret2);

输出结果:

 注意事项:

1. 索引从0开始

2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标

9. trim() 去掉字符串中的左右空格,保留中间空格


 代码示例

String str = " abcde fg hijk ";
System.out.println(str);
System.out.println(str.trim());

输出结果:

相关文章:

【JavaSE】String类常用字符串方法总结

目录 1. length() 求字符串长度 2. isEmpty() 判断字符串是否为空 3. String对象的比较 3.1 equals() 判断字符串是否相同 3.2 compareTo() 比较字符串大小 3.3 compareToIgnoreCase 忽略大小写比较 4. 字符串查找 4.1 charAt() 返回指定索引处的字符 4.2 indexOf() 4…...

python3+TensorFlow 2.x(二) 回归模型

目录 回归算法 1、线性回归 (Linear Regression) 一元线性回归举例 2、非线性回归 3、回归分类 回归算法 回归算法用于预测连续的数值输出。回归分析的目标是建立一个模型&#xff0c;以便根据输入特征预测目标变量&#xff0c;在使用 TensorFlow 2.x 实现线性回归模型时&…...

机器人抓取与操作概述(深蓝)——1

工业机器人&#xff1a;① “臂”的形态 ② “手”的形态 ③ 视觉&#xff0c;力和触觉 1 机器人的不同形态 “臂”的形态 “手”的形态 2 常见的操作任务 操作&#xff1a;插入、推和滑 抓取&#xff1a;两指&#xff08;平行夹爪&#xff09;抓取、灵巧手抓取 落地-产…...

简单聊聊“DeepSeek”

目录 DeepSeek一夜火爆并受到广泛关注的优势 技术实力与创新 低成本与高效率 开源与免费 市场策略与应用领域 团队与资金优势 行业认可与媒体关注 DeepSeek在推理效率上的特别之处 多头潜在注意力&#xff08;MLA&#xff09; 多词元预测&#xff08;MTP&#xff09;…...

使用 Docker + Nginx + Certbot 实现自动化管理 SSL 证书

使用 Docker Nginx Certbot 实现自动化管理 SSL 证书 在互联网安全环境日益重要的今天&#xff0c;为站点或应用部署 HTTPS 已经成为一种常态。然而&#xff0c;手动申请并续期证书既繁琐又容易出错。本文将以 Nginx Certbot 为示例&#xff0c;基于 Docker 容器来搭建一个…...

粒子群算法 笔记 数学建模

引入: 如何找到全局最大值&#xff1a;如果只是贪心的话&#xff0c;容易被局部最大解锁定 方法有&#xff1a;盲目搜索&#xff0c;启发式搜索 盲目搜索&#xff1a;枚举法和蒙特卡洛模拟&#xff0c;但是样例太多花费巨量时间 所以启发式算法就来了&#xff0c;通过经验和规…...

【C语言】结构体与共用体深入解析

在C语言中&#xff0c;结构体&#xff08;struct&#xff09;和共用体&#xff08;union&#xff09;都是用来存储不同类型数据的复合数据类型&#xff0c;它们在程序设计中具有重要的作用。 推荐阅读&#xff1a;操作符详细解说&#xff0c;让你的编程技能更上一层楼 1. 结构体…...

es6.7.1分词器ik插件安装-和head插件连接es特殊配置

es6.7.1分词器ik插件安装-和head插件连接es特殊配置 如果对运维课程感兴趣&#xff0c;可以在b站上、A站或csdn上搜索我的账号&#xff1a; 运维实战课程&#xff0c;可以关注我&#xff0c;学习更多免费的运维实战技术视频 1.查看es6.7.1和es-head安装位置和es插件路径 [ro…...

java求职学习day18

常用的设计原则和设计模式 1 常用的设计原则&#xff08;记住&#xff09; 1.1 软件开发的流程 需求分析文档、概要设计文档、详细设计文档、编码和测试、安装和调试、维护和升级 1.2 常用的设计原则 &#xff08;1&#xff09;开闭原则&#xff08;Open Close Principle…...

单链表专题(上)

链表的定义与创建 线性表&#xff1a; 1. 物理结构上不一定是线性的 2. 逻辑结构上一定是线性的 链表是一种物理存储结构上非连续&#xff0c;非顺序的存储结构 链表也是线性表的一种&#xff0c;但是在物理结构上不是连续的 链表是由一个一个的节点组成&#xff0c;需要数…...

【stm32学习】STM32F103相关特性

| 名称 | 缩写 | 频率 | 外部连接 | 功能 | 用途 | 特性 | |--------------------|------|----------------|---------------|------------|--------------|----------------| | 外部高速晶体振荡器 | HSE | 4~16MHz …...

PostGIS笔记:PostgreSQL中表、键和索引的基础操作

创建、查看与删除表 在数据库中创建一个表&#xff0c;使用如下代码&#xff1a; create table streets (id serial not null primary key, name varchar(50));这里的表名是streets&#xff0c;id是主键所以非空&#xff0c;采用serial数据类型&#xff0c;这个数据类型会自动…...

蓝桥杯python语言基础(3)——循环结构

一、for语句 理解range函数 range(start, stop, step) start: 序列开始的数字&#xff08;默认为0&#xff09;。stop: 序列结束的数字&#xff08;不包含stop&#xff09;。step: 步长&#xff08;默认为1&#xff09;。 练习 输出在 l 和 r 之间的所有偶数&#xff1a; pri…...

微服务网关鉴权之sa-token

目录 前言 项目描述 使用技术 项目结构 要点 实现 前期准备 依赖准备 统一依赖版本 模块依赖 配置文件准备 登录准备 网关配置token解析拦截器 网关集成sa-token 配置sa-token接口鉴权 配置satoken权限、角色获取 通用模块配置用户拦截器 api模块配置feign…...

23【进制的理解】

很多人可能听过计算机的最底层是2进制执行&#xff0c;但是原理并不知道&#xff0c;我们今天先不讨论那么复杂的问题&#xff0c;先讨论什么是进制 1910&#xff0c;10并不是1个字符&#xff0c;而是2个字符&#xff0c;也就是说在10进制里面没有“10”这个字符&#xff0c;1…...

jemalloc 5.3.0的tsd模块的源码分析

一、背景 在主流的内存库里&#xff0c;jemalloc作为android 5.0-android 10.0的默认分配器肯定占用了非常重要的一席之地。jemalloc的低版本和高版本之间的差异特别大&#xff0c;低版本的诸多网上整理的总结&#xff0c;无论是在概念上和还是在结构体命名上在新版本中很多都…...

【Convex Optimization Stanford】Lec3 Function

【Convex Optimization Stanford】Lec3 Function 前言凸函数的定义对凸函数在一条线上的限制增值扩充&#xff1f; 一阶条件二阶条件一些一阶/二阶条件的例子象集和sublevel set关于函数凸性的扩展&#xff08;Jesen Inequality)保持函数凸性的操作非负加权和 & 仿射函数的…...

深入 Rollup:从入门到精通(三)Rollup CLI命令行实战

准备阶段&#xff1a;初始化项目 初始化项目&#xff0c;这里使用的是pnpm&#xff0c;也可以使用yarn或者npm # npm npm init -y # yarn yarn init -y # pnpm pnpm init安装rollup # npm npm install rollup -D # yarn yarn add rollup -D # pnpm pnpm install rollup -D在…...

wangEditor富文本编辑器,Laravel上传图片配置和使用

文章目录 前言步骤1. 构造好前端模版2. 搭建后端存储3. 调试 前言 由于最近写项目需要使用富文本编辑器&#xff0c;使用的是VUE3.0版本所以很多不兼容&#xff0c;实际测试以后推荐使用wangEditor 步骤 构造好前端模版搭建后端存储调试 1. 构造好前端模版 安装模版 模版安…...

chrome源码剖析—进程通信

Chrome 浏览器采用多进程架构&#xff08;multi-process architecture&#xff09;&#xff0c;这种架构使得每个浏览器标签、扩展、插件、GPU 渲染等都在独立的进程中运行。为了确保不同进程之间的高效通信&#xff0c;Chrome 使用 进程间通信&#xff08;IPC, Inter-Process …...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...

深入理解 React 样式方案

React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…...