Java String 类
Java String 类常用方法详解
在 Java 编程里,字符串操作十分常见,而 String
类作为 Java 标准库的核心类,用于表示不可变的字符序列。任何对字符串的修改操作都会返回一个新的字符串对象,不会改变原始字符串。本文将详细介绍 String
类的常用方法,并结合示例代码帮助理解。
一、String 对象的创建
String
对象的创建主要有以下两种方式:
1. 直接赋值
这是最常见的创建字符串的方式,使用双引号将一系列字符括起来即可:
String str1 = "Hello, ";
2. 使用 new
关键字
通过对象实例化的方式,将需要创建的字符串作为构造参数传入:
String str2 = new String("Hello, Java");
若调用 String
类的无参构造方法,则会创建一个空字符串,不过这种方式很少使用:
String str3 = new String();
二、获取字符串长度
可以使用 length()
方法来获取字符串的长度,示例代码如下:
public class StringMethod1 {public static void main(String[] args) {String str = "hello world!";int length = str.length();System.out.println("str的长度为:" + length);}
}
运行结果:
str的长度为:12
需要注意的是,字符串中的空格也算一个字符。
三、字符串查找
1. 获取指定位置字符
使用 char charAt(int index)
方法可以获取字符串指定位置的字符,索引下标从 0 开始。示例如下:
public class StringMethod2 {public static void main(String[] args) {String str = "I love Java";char c = str.charAt(7);System.out.println("索引位置为7的字符为:" + c);}
}
运行结果:
索引位置为7的字符为:J
2. 查找字符串位置
indexOf()
:获取字符或子串在字符串中第一次出现的位置。lastIndexOf()
:获取字符或子串在字符串中最后一次出现的位置。
示例代码如下:
public class StringMethod2 {public static void main(String[] args) {String str = "I love Java, I love imooc!";// 获取字符在字符串中第一次出现的位置int i1 = str.indexOf('a');System.out.println("字符a在字符串str第一次出现的位置为:" + i1);// 获取子串在字符串中第一次出现的位置int i2 = str.indexOf("love");System.out.println("子串love在字符串str第一次出现的位置为:" + i2);// 获取字符在字符串中最后一次出现的位置int i3 = str.lastIndexOf('e');System.out.println("字符e在字符串str最后一次出现的位置为:" + i3);// 获取子串在字符串中最后一次出现的位置int i4 = str.lastIndexOf("I love");System.out.println("子串I love在字符串str最后一次出现的位置为:" + i4);// 查找不存在的字符int i5 = str.indexOf('E');System.out.println("查找不存在的字符E的结果为:" + i5);}
}
运行结果:
字符a在字符串str第一次出现的位置为:8
子串love在字符串str第一次出现的位置为:2
字符e在字符串str最后一次出现的位置为:18
子串I love在字符串str最后一次出现的位置为:13
查找不存在的字符E的结果为:-1
需要注意的是,以上方法的参数都是区分大小写的,如果没有找到指定的字符或子串,会返回 -1。
四、字符串截取
可以使用 substring()
方法来获取子串,String
类中有两个重载的实例方法:
String substring(int beginIndex)
:获取从beginIndex
位置开始到结束的子串。String substring(int beginIndex, int endIndex)
:获取从beginIndex
位置开始到endIndex
位置的子串(不包含endIndex
位置字符)。
示例代码如下:
public class StringMethod3 {public static void main(String[] args) {String str = "I love Java";String substring1 = str.substring(2);String substring2 = str.substring(2, 6);System.out.println("从索引位置2到结束的子串为:" + substring1);System.out.println("从索引位置2到索引位置6的子串为:" + substring2);}
}
运行结果:
从索引位置2到结束的子串为:love Java
从索引位置2到索引位置6的子串为:love
五、字符串切割
1. 切割为子串数组
使用 String[] split(String regex)
方法可将字符串切割为子串,其参数 regex
是一个正则表达式分隔符,返回字符串数组。示例如下:
public class StringMethod4 {public static void main(String[] args) {String str1 = "I love Java";String[] strArr = str1.split(" ");for (String str : strArr) {System.out.print(str + "\t");}}
}
运行结果:
I love Java
对于一些特殊的分隔符,如 *
、^
、:
、|
、.
等,需要使用转义字符转义。例如:
// 以 * 切割
String str2 = "I*love*Java";
String[] strArr2 = str2.split("\\*");// 以 \ 切割
String str3 = "I\\love\\Java";
String[] strArr3 = str3.split("\\\\");// 以 | 切割
String str4 = "I|love|Java";
String[] strArr4 = str4.split("\\|");
另外,还有一个重载方法 String[] split(String regex, int limit)
,其第二个参数 limit
用以控制正则匹配被应用的次数,会影响结果的长度。
2. 切割为 byte
数组
在实际工作中,网络上的数据传输通常使用二进制字节数据,因此字符串和字节数组之间的相互转换很常用。可以使用 getBytes()
方法将字符串转换为 byte
数组,示例如下:
public class StringMethod4 {public static void main(String[] args) {String str2 = "我喜欢Java";System.out.println("将字符串转换为byte数组:");byte[] ascii = str2.getBytes();for (byte aByte : ascii) {System.out.print(aByte + "\t");}// 将字节数组转换为字符串String s = new String(ascii);System.out.println("\n将字节数组转换为字符串:" + s);}
}
六、字符串大小写转换
字符串的大小写转换有两个方法:
toLowerCase()
:将字符串转换为小写。toUpperCase()
:将字符串转换为大写。
示例代码如下:
public class StringMethod5 {public static void main(String[] args) {String str = "HELLO world";String s1 = str.toLowerCase();System.out.println("字符串str转换为小写后为:" + s1);String s2 = s1.toUpperCase();System.out.println("字符串s1转换为大写后为:" + s2);// 实现大小写互换String[] strArr = str.split(" ");String result = strArr[0].toLowerCase() + " " + strArr[1].toUpperCase();System.out.println("字符串str的大小写互换后为:" + result);}
}
运行结果:
字符串str转换为小写后为:hello world
字符串s1转换为大写后为:HELLO WORLD
字符串str的大小写互换后为:hello WORLD
七、字符串比较
String
类提供了 boolean equals(Object object)
方法来比较字符串内容是否相同,返回一个布尔类型的结果。需要特别注意的是,在比较字符串内容是否相同时,必须使用 equals()
方法而不能使用 ==
运算符。示例代码如下:
public class StringMethod6 {public static void main(String[] args) {String str1 = "hello";String str2 = "hello";String str3 = new String("hello");System.out.println("使用equals()方法比较str1和str2的结果为:" + str1.equals(str2));System.out.println("使用==运算符比较str1和str2的结果为:" + (str1 == str2));System.out.println("使用equals()方法比较str1和str3的结果为:" + str1.equals(str3));System.out.println("使用==运算符比较str1和str3的结果为:" + (str1 == str3));}
}
运行结果:
使用equals()方法比较str1和str2的结果为:true
使用==运算符比较str1和str2的结果为:true
使用equals()方法比较str1和str3的结果为:true
使用==运算符比较str1和str3的结果为:false
==
运算符比较的是两个变量的地址而不是内容。当使用直接赋值的方式创建字符串时,相同内容的字符串会指向常量池中的同一个对象;而使用 new
关键字创建字符串对象时,会在堆空间实例化一个新的对象。
八、小结
本文介绍了 Java String
类的常用方法:
- 使用
length()
方法可以获取字符串长度。 - 使用
charAt()
、indexOf()
以及lastIndexOf()
方法可以对字符串进行查找。 substring()
方法可以对字符串进行截取,split()
、getBytes()
方法可以将字符串切割为数组。toLowerCase()
和toUpperCase()
方法分别用于大小写转换,使用equals()
方法对字符串进行比较,要注意对字符串内容进行比较时,不要使用==
运算符。
这些方法大多有重载方法,实际工作中,要根据合适的场景选用对应的重载方法。此外,String
类还有很多未介绍到的方法,使用时可以翻阅官网文档进行学习。
相关文章:
Java String 类
Java String 类常用方法详解 在 Java 编程里,字符串操作十分常见,而 String 类作为 Java 标准库的核心类,用于表示不可变的字符序列。任何对字符串的修改操作都会返回一个新的字符串对象,不会改变原始字符串。本文将详细介绍 Str…...

P8665 [蓝桥杯 2018 省 A] 航班时间
P8665 [蓝桥杯 2018 省 A] 航班时间 题目代码分析 题目 代码 #include <iostream> #include <vector> #include <string> #include <algorithm> #include <math.h> #include <queue>#include <cctype> using namespace std; int t;…...
Vue3项目与pnpm使用教程
文章目录 Vue3项目与pnpm使用教程一、pnpm简介二、安装pnpm三、创建Vue3项目四、运行Vue3项目五、管理项目依赖六、配置pnpm七、使用pnpm的额外功能八、总结 Vue3项目与pnpm使用教程 一、pnpm简介 pnpm是一个高性能的Node.js包管理工具,相较于npm和yarn࿰…...
C++初阶——简单实现list
目录 1、前言 2、List.h 3、Test.cpp 1、前言 1. 简单实现std::list,重点:迭代器,类模板,运算符重载。 2. 并不是,所有的类,都需要深拷贝,像迭代器类模板,只是用别的类的资源&am…...

C/C++后端开发面经
字节跳动 客户端开发 实习 一面(50min) 自我介绍是否愿意转语言,是否只愿意搞后端选一个项目来详细谈谈HTTP和HTTPS有什么区别?谈一下HTTPS加密的具体过程: 非对称加密 对称加密 证书认证的方式 非对称加密是为了保证对称密钥的安全性。 对称…...

linux 编辑器
1.三种模式 2.图例 3.wq 4.光标的使用...

【事件驱动框架OSAL】二.消息的管理机制
OSAL消息管理机制 二、消息管理机制2.1 消息的数据结构2.2 消息内存分配2.3 消息的接收和销毁2.3 源码链接地址 二、消息管理机制 在上一篇文中提到,系统消息事件(SYS_EVENT_MSG)用于任务间传递数据,而消息队列是这种机制的基础&…...
《论多源数据集成及应用》审题技巧 - 系统架构设计师
论多源数据集成及应用写作框架 一、考点概述 本论题“论多源数据集成及应用”主要考察的是计算机软件测试工程师在数据管理和集成方面的专业知识与实践能力。论题聚焦于信息爆炸时代企业、组织和个人所面临的数据挑战,特别是如何有效地收集、整理和清洗来自不同渠…...

【企业微信开发工具,获取位置】
微信开发者工具获取位置失败 报错原因解决方案 报错原因 getLocation:fail, the permission value is offline verifying解决方案 在开发工具栏输入链接,进行位置获取获取成功后,重新进入调用获取位置的页面即可如下图:...
HTML之JavaScript DOM编程获取元素的方式
HTML之JavaScript DOM编程获取元素的方式 1.获得document DOM树window.document(是window的属性)2.从document中获取要操作的元素1.直接获取var aaa document.getElementById("username") // 根据元素的id值获取页面上的唯一一个元素,有同名的则返回找到的第一个var…...
如何安装vm和centos
以下是在VMware中安装CentOS的一般步骤: 一、安装VMware 以下是在 Windows 系统中安装 VMware 软件的详细步骤: 1. 下载 VMware 软件: - 访问 VMware 官方网站(https://www.vmware.com/)。 - 根据您的操作系统选择合…...

docker 安装redis 7.4.2并挂载配置文件以及设置密码
文章目录 docker 安装redis 7.4.2下载 redis如果你喜欢使用最新的版本创建挂载redis 配置文件创建容器 docker 安装redis 7.4.2 截至2025年2月21日,Redis的最新稳定版本是 7.4.2。 下载 redis 如果你想拉取Redis的特定版本(例如最新的稳定版本 7.4.2&a…...

计算机毕业设计SpringBoot+Vue.js在线教育系统(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Linux-C-函数栈-SP寄存器
sp(Stack Pointer,栈指针)是计算机体系结构中一个非常重要的寄存器,下面将详细介绍其作用和原理。 作用 1. 管理栈内存 栈是一种后进先出(LIFO,Last In First Out)的数据结构,在程…...
vi的基本使用
vi 是 Unix/Linux 系统中最常用的文本编辑器之一,功能强大但学习曲线较陡。以下是 vi 的基本使用方法: --- ### **1. vi 的两种模式** - **命令模式(Command Mode)**: - 默认进入的模式,用于执行命令&a…...

clickhouse--表引擎的使用
表引擎决定了如何存储表的数据。包括: 数据的存储方式和位置,写到哪里以及从哪里读取数据。(默认是在安装路径下的 data 路径)支持哪些查询以及如何支持。(有些语法只有在特定的引擎下才能用)并发数据访问。索引的使用࿰…...
LeetCode刷题零碎知识点整理
系列博客目录 文章目录 系列博客目录 数组变量有length属性,String类的对象有length()方法。String s; s.split("\\s");不能去除头部空格,需要使用s s.trim();String类的对象有toCharArray()方法,List<>类型有toArray()方法…...
GLTFLoader.js和OrbitControls.js两个 JavaScript 文件都是 Three.js 生态系统中的重要组成部分
GLTFLoader.js和OrbitControls.js两个 JavaScript 文件都是 Three.js 生态系统中的重要组成部分: 1. GLTFLoader.js 作用 GLTFLoader.js 是 Three.js 库中的一个辅助加载器脚本,其主要功能是加载 GLB 或 GLTF 格式的 3D 模型。GLTF(GL Tra…...
大厂数据仓库数仓建模面试题及参考答案
目录 什么是数据仓库,和数据库有什么区别? 数据仓库的基本原理是什么? 数据仓库架构是怎样的? 数据仓库分层(层级划分),每层做什么?分层的好处是什么?数据分层是根据什么?数仓分层的原则与思路是什么? 数仓建模常用模型有哪些?区别、优缺点是什么?星型模型和雪…...

angular简易计算器
说明: 用angular实现计算器效果,ui风格为暗黑 效果图: step1: C:\Users\Administrator\WebstormProjects\untitled4\src\app\calnum\calnum.component.ts import { Component } from angular/core;Component({selector: app-calnum,import…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...

Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...

DAY 45 超大力王爱学Python
来自超大力王的友情提示:在用tensordoard的时候一定一定要用绝对位置,例如:tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾: tensorboard的发展历史和原理tens…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...