Java 字符串处理

Java 是一种广泛使用的编程语言,而字符串处理是 Java 编程中非常重要的一部分。Java 提供了丰富的字符串操作功能,通过 String 类和 StringBuilder、StringBuffer 类来处理字符串。

一、Java 字符串的创建

1. 使用字面量

在 Java 中,字符串字面量是最常见的字符串创建方式:

String str = "Hello, World!";

2. 使用 new 关键字

使用 new 关键字创建字符串:

String str = new String("Hello, World!");

虽然这两种方式看似相同,但它们在内存管理上有所不同。字面量方式会将字符串放在字符串池中,而使用 new 关键字则会在堆上创建一个新的字符串对象。

3. 使用字符数组

可以通过字符数组来创建字符串:

char[] charArray = {'H', 'e', 'l', 'l', 'o'};
String str = new String(charArray);

二、字符串的操作

1. 连接字符串

使用 + 运算符

最简单的字符串连接方式是使用 + 运算符:

String str1 = "Hello, ";
String str2 = "World!";
String str3 = str1 + str2;  // str3 内容为 "Hello, World!"
使用 concat 方法

concat 方法也可以用来连接字符串:

String str1 = "Hello, ";
String str2 = "World!";
String str3 = str1.concat(str2);  // str3 内容为 "Hello, World!"

2. 字符串比较

使用 equals 方法

equals 方法用于比较两个字符串的内容是否相同:

String str1 = "Hello";
String str2 = "Hello";
boolean isEqual = str1.equals(str2);  // isEqual 为 true
使用 == 运算符

== 运算符比较的是两个字符串对象的引用是否相同:

String str1 = "Hello";
String str2 = new String("Hello");
boolean isSame = (str1 == str2);  // isSame 为 false

3. 查找字符串

使用 indexOf 方法

indexOf 方法返回子字符串在字符串中第一次出现的位置:

String str = "Hello, World!";
int index = str.indexOf("World");  // index 为 7
使用 lastIndexOf 方法

lastIndexOf 方法返回子字符串在字符串中最后一次出现的位置:

String str = "Hello, World! Hello!";
int index = str.lastIndexOf("Hello");  // index 为 14

4. 字符串替换

使用 replace 方法

replace 方法用于将字符串中的某个子字符串替换为另一个字符串:

String str = "Hello, World!";
String newStr = str.replace("World", "Java");  // newStr 内容为 "Hello, Java!"
使用 replaceAll 方法

replaceAll 方法使用正则表达式替换字符串中的所有匹配项:

String str = "Hello, World! Hello!";
String newStr = str.replaceAll("Hello", "Hi");  // newStr 内容为 "Hi, World! Hi!"

5. 字符串分割

使用 split 方法

split 方法使用正则表达式将字符串分割为子字符串数组:

String str = "apple,banana,orange";
String[] fruits = str.split(",");  // fruits 为 ["apple", "banana", "orange"]

6. 字符串子串

使用 substring 方法

substring 方法用于提取字符串中的子字符串:

String str = "Hello, World!";
String subStr = str.substring(7);  // subStr 内容为 "World!"
String subStr2 = str.substring(7, 12);  // subStr2 内容为 "World"

7. 字符串大小写转换

使用 toUpperCasetoLowerCase 方法

toUpperCase 方法将字符串转换为大写,toLowerCase 方法将字符串转换为小写:

String str = "Hello, World!";
String upperStr = str.toUpperCase();  // upperStr 内容为 "HELLO, WORLD!"
String lowerStr = str.toLowerCase();  // lowerStr 内容为 "hello, world!"

8. 去除字符串两端的空格

使用 trim 方法

trim 方法用于去除字符串两端的空格:

String str = "   Hello, World!   ";
String trimmedStr = str.trim();  // trimmedStr 内容为 "Hello, World!"

三、常用的 String 类方法

1. length

length 方法返回字符串的长度:

String str = "Hello, World!";
int length = str.length();  // length 为 13

2. charAt

charAt 方法返回字符串中指定位置的字符:

String str = "Hello, World!";
char ch = str.charAt(7);  // ch 为 'W'

3. contains

contains 方法检查字符串是否包含指定的子字符串:

String str = "Hello, World!";
boolean contains = str.contains("World");  // contains 为 true

4. startsWithendsWith

startsWith 方法检查字符串是否以指定的子字符串开头,endsWith 方法检查字符串是否以指定的子字符串结尾:

String str = "Hello, World!";
boolean starts = str.startsWith("Hello");  // starts 为 true
boolean ends = str.endsWith("World!");  // ends 为 true

5. isEmpty

isEmpty 方法检查字符串是否为空(长度为 0):

String str = "";
boolean isEmpty = str.isEmpty();  // isEmpty 为 true

6. intern

intern 方法将字符串放入字符串池中并返回字符串池中的字符串引用:

String str1 = new String("Hello");
String str2 = str1.intern();
String str3 = "Hello";
boolean isSame = (str2 == str3);  // isSame 为 true

7. format

format 方法使用指定的格式字符串和参数返回一个格式化的字符串:

String name = "Alice";
int age = 25;
String formattedStr = String.format("Name: %s, Age: %d", name, age);  // formattedStr 内容为 "Name: Alice, Age: 25"

8. valueOf

valueOf 方法将其他类型的数据转换为字符串:

int number = 123;
String str = String.valueOf(number);  // str 内容为 "123"

四、StringBuilder 和 StringBuffer

1. StringBuilder

StringBuilder 类用于创建可变的字符串,它不是线程安全的,但效率较高:

StringBuilder sb = new StringBuilder("Hello");
sb.append(", World!");
String result = sb.toString();  // result 内容为 "Hello, World!"

2. StringBuffer

StringBuffer 类也是用于创建可变的字符串,它是线程安全的,但效率较低:

StringBuffer sb = new StringBuffer("Hello");
sb.append(", World!");
String result = sb.toString();  // result 内容为 "Hello, World!"

Java 的字符串处理功能非常强大,通过 String 类和 StringBuilder、StringBuffer 类提供了丰富的方法来创建、操作和管理字符串。理解和掌握这些方法对于提高 Java 编程能力至关重要。

黑马程序员免费预约咨询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

应急响应-网页篡改-技术操作只指南

初步判断 网页篡改事件区别于其他安全事件地明显特点是:打开网页后会看到明显异常。 业务系统某部分出现异常字词 网页被篡改后,在业务系统某部分网页可能出现异常字词,例如,出现赌博、色情、某些违法APP推广内容等。2019年4月…

Oracle创建用户时提示ORA-65096:公用用户名或角色名无效

Oracle创建用户时提示“ORA-65096:公用用户名或角色名无效” 如下图所示: 解决方法:在新增用户名前面加上C##或者c##就可以解决无效问题,具体什么原因还不清楚,需要再研究一下。

一机实现All in one,NAS如何玩转虚拟机!

常言道,中年男人玩具有三宝 充电器、路由器、NAS 你问我NAS的魔力在哪里? 一机实现All in one洒洒水啦 那NAS又如何玩转虚拟机呢? 跟我来 0基础也能轻松get! NAS如何玩转虚拟机 铁威马NAS的VirtualBox的简单易用,可虚拟的系统包括Win…

通杀漏洞!华为、TP_Link、360、小米等多款主流路由器沦陷

近日,清华大学计算机系团队发现多款主流路由器固件中 NAT 映射处理存在的安全漏洞,可被攻击者利用构造发起 TCP劫持攻击,劫持 Wi-Fi 下的 TCP 流量。 近78%的路由器存在漏洞! 实验对30家厂商的67款主流路由器进行了测试&#xf…

python核心编程(二)

python面向对象 一、基本理论二、 面向对象在python中实践2.1 如何去定义类2.2 通过类创建对象2.3 属性相关2.4 方法相关 三、python对象的生命周期,以及周期方法3.1 概念3.2 监听对象的生命周期 四、面向对象的三大特性4.1 封装4.2 继承4.2.1 概念4.2.1 目的4.2.2 分类4.2.3 t…

cgicc开发(文件上传)

//cgicc文件上传封装 void UploadSoftware() {// 初始化CGIC环境Cgicc cgi;// 获取上传的文件file_iterator fileIter cgi.getFile("button_browse"); //from表单中,输入为文件属性(typefile)的name属性值if (fileIter cgi.getFiles().end()){ #if (DEBUG true)co…

软件设计师中级 重点 笔记

文章目录 下午题目网络DNS域名解析分类:域名协议简介网络设备 算法软件工程实体联系图(E-R图) 其它 下午题目 数据流图补充原则 22年下半年真题 更早-真题大全 答题技巧 网络 DNS域名解析分类: 递归查询的顺序:1.本…

如何在 JavaScript 中验证电子邮件地址

在开发Web应用程序的过程中,验证用户输入的电子邮件地址是一个常见需求。尽管看似简单,但要准确地验证电子邮件地址并非易事。本文将探讨如何使用正则表达式在JavaScript中进行电子邮件地址的验证,同时介绍一些最佳实践与具体代码实例。 使用正则表达式进行验证 正则表达式…

电脑重要文件如何加密保护?教你两种方法

加密是保护电脑重要文件的常见方法,可以有效避免文件数据泄露。那么,电脑重要文件该如何加密保护呢?下面小编就来教你两种方法,帮助你解决文件安全问题。 超级加密3000 超级加密3000是一款专业的电脑数据加密软件,可以…

流量被劫持?不怕,轻松Get 防“窃”技巧!

流量劫持是一种恶意行为,攻击者会在用户访问网站时,将其流量重定向到第三方站点上,导致用户访问的不是原始目标站点。这种行为不仅会影响网站的品牌形象,还会导致用户流失和信息泄露等严重后果。本文将探讨网站如何应对流量劫持。…

SurfaceFinger layer创建过程

SurfaceFinger layer创建过程 引言 本篇博客重点分析app创建Surface时候,SurfaceFlinger是如何构建对应的Layer的主要工作有那些! 这里参考的Android源码是Android 13 aosp! app端创建Surface 其核心流程可以分为如下接部分: app使用w,h,fo…

window.location.search取不到值

window.location.search window.location.search没有值的原因: URL中使用了 hash (指URL中带有#符号),导致URL后面携带的参数被location.hash截取走了,你再使用window.location.search得到的就是空值 打印 window.location 其实…

收银系统源码--零售连锁店铺如何选择适合自己的收银系统?

如果你现在还认为小便利店只要简单的收款,只有大型的连锁便利店才需要收银软件和管理软件,那你就错了,连锁品牌的便利店是必须要用到专业的收银软件,但是小微型的便利店更应该要用专门的软件, 在各行各业逐步革新互联网…

ORCLE删除数据库文件

在实际操作中很少会去删除数据库文件,但是凡事都有例外,由于一些特殊原因,例如存储方式变化、磁盘空间不够等,需要调整和删除一些无效的数据库文件,本文介绍一下实践出来的一种删除数据库文件的操作方式。 删除前请对数…

Linux系统之touch命令的基本使用

Linux系统之touch命令的基本使用 一、touch命令介绍1. touch命令简介2. touch命令作用 二、touch命令帮助1. touch命令的帮助信息2. touch命令的选项解释 三、touch命令的基本使用1. 查看touch工具版本2. 创建空文件3.查看空文件属性4. 修改文件时间戳5. 文件不存在时不创建 四…

【C#】递归移动拷贝目录

当我们需要移动目录时,不能的简单的Directory.Move,这个方法不能支持递归迁移目录 需要我们进行递归进行迁移 void Main() {string sourcePath "D:\费用报销";string destinationPath "D:\文档\费用报销";// 确保源路径存在if (!D…

概率分布函数与误差函数的关系

正态函数(高斯分布) 对其求[b,x]区间的积分 标准误差函数 以下两个方程相等(a,b取值任意) 两个函数重合 可知正态函数 f(t) 在[b,x]的区间上积分等于 引用desmos计算器:Desmos | Lets learn together.

2024年,企业薪酬预算怎么做?

新的一年已经开始,许多企业的HR和财务部门正面临着薪酬预算的问题。预算数额过高,老板不会批准;而预算水平过低,则会引起员工不满。因此,薪酬预算是一项棘手的任务。然而,薪酬预算对企业的人力资源管理至关…

5.命令行提示符

一、打开终端(有以下几种方式) 1.在搜索框输入 terminal 2.命令 (1)ctrlaltt打开新的终端 (2)ctrlshiftt:在已经打开终端的基础内,新打开一个同路径的终端。 (3&#xf…

使用 Go 实现 HelloWorld 程序,并分析其结构

在学习任何新的编程语言时,编写一个 “Hello, World” 程序通常是最初的入门步骤。这不仅是一个传统,也是一种快速了解语言基本语法和运行机制的有效方法。对于 Go 语言,这个过程不仅可以帮助新手快速入门,还提供了一个窗口&#…