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

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包管理工具&#xff0c;相较于npm和yarn&#xff0…...

C++初阶——简单实现list

目录 1、前言 2、List.h 3、Test.cpp 1、前言 1. 简单实现std::list&#xff0c;重点&#xff1a;迭代器&#xff0c;类模板&#xff0c;运算符重载。 2. 并不是&#xff0c;所有的类&#xff0c;都需要深拷贝&#xff0c;像迭代器类模板&#xff0c;只是用别的类的资源&am…...

C/C++后端开发面经

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

linux 编辑器

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

【事件驱动框架OSAL】二.消息的管理机制

OSAL消息管理机制 二、消息管理机制2.1 消息的数据结构2.2 消息内存分配2.3 消息的接收和销毁2.3 源码链接地址 二、消息管理机制 在上一篇文中提到&#xff0c;系统消息事件&#xff08;SYS_EVENT_MSG&#xff09;用于任务间传递数据&#xff0c;而消息队列是这种机制的基础&…...

《论多源数据集成及应用》审题技巧 - 系统架构设计师

论多源数据集成及应用写作框架 一、考点概述 本论题“论多源数据集成及应用”主要考察的是计算机软件测试工程师在数据管理和集成方面的专业知识与实践能力。论题聚焦于信息爆炸时代企业、组织和个人所面临的数据挑战&#xff0c;特别是如何有效地收集、整理和清洗来自不同渠…...

【企业微信开发工具,获取位置】

微信开发者工具获取位置失败 报错原因解决方案 报错原因 getLocation:fail, the permission value is offline verifying解决方案 在开发工具栏输入链接&#xff0c;进行位置获取获取成功后&#xff0c;重新进入调用获取位置的页面即可如下图&#xff1a;...

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的一般步骤&#xff1a; 一、安装VMware 以下是在 Windows 系统中安装 VMware 软件的详细步骤&#xff1a; 1. 下载 VMware 软件&#xff1a; - 访问 VMware 官方网站&#xff08;https://www.vmware.com/&#xff09;。 - 根据您的操作系统选择合…...

docker 安装redis 7.4.2并挂载配置文件以及设置密码

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

计算机毕业设计SpringBoot+Vue.js在线教育系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

Linux-C-函数栈-SP寄存器

sp&#xff08;Stack Pointer&#xff0c;栈指针&#xff09;是计算机体系结构中一个非常重要的寄存器&#xff0c;下面将详细介绍其作用和原理。 作用 1. 管理栈内存 栈是一种后进先出&#xff08;LIFO&#xff0c;Last In First Out&#xff09;的数据结构&#xff0c;在程…...

vi的基本使用

vi 是 Unix/Linux 系统中最常用的文本编辑器之一&#xff0c;功能强大但学习曲线较陡。以下是 vi 的基本使用方法&#xff1a; --- ### **1. vi 的两种模式** - **命令模式&#xff08;Command Mode&#xff09;**&#xff1a; - 默认进入的模式&#xff0c;用于执行命令&a…...

clickhouse--表引擎的使用

表引擎决定了如何存储表的数据。包括&#xff1a; 数据的存储方式和位置&#xff0c;写到哪里以及从哪里读取数据。(默认是在安装路径下的 data 路径)支持哪些查询以及如何支持。&#xff08;有些语法只有在特定的引擎下才能用&#xff09;并发数据访问。索引的使用&#xff0…...

LeetCode刷题零碎知识点整理

系列博客目录 文章目录 系列博客目录 数组变量有length属性&#xff0c;String类的对象有length()方法。String s; s.split("\\s");不能去除头部空格&#xff0c;需要使用s s.trim();String类的对象有toCharArray()方法&#xff0c;List<>类型有toArray()方法…...

GLTFLoader.js和OrbitControls.js两个 JavaScript 文件都是 Three.js 生态系统中的重要组成部分

GLTFLoader.js和OrbitControls.js两个 JavaScript 文件都是 Three.js 生态系统中的重要组成部分&#xff1a; 1. GLTFLoader.js 作用 GLTFLoader.js 是 Three.js 库中的一个辅助加载器脚本&#xff0c;其主要功能是加载 GLB 或 GLTF 格式的 3D 模型。GLTF&#xff08;GL Tra…...

大厂数据仓库数仓建模面试题及参考答案

目录 什么是数据仓库,和数据库有什么区别? 数据仓库的基本原理是什么? 数据仓库架构是怎样的? 数据仓库分层(层级划分),每层做什么?分层的好处是什么?数据分层是根据什么?数仓分层的原则与思路是什么? 数仓建模常用模型有哪些?区别、优缺点是什么?星型模型和雪…...

angular简易计算器

说明&#xff1a; 用angular实现计算器效果&#xff0c;ui风格为暗黑 效果图&#xff1a; step1: C:\Users\Administrator\WebstormProjects\untitled4\src\app\calnum\calnum.component.ts import { Component } from angular/core;Component({selector: app-calnum,import…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...