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

5 Java字符串操作

字符串操作

  • 1、String类
    • 1.1 声明字符串
    • 1.2 创建字符串 =
    • 1.3 字符串连接 +/+=
      • 连接字符串
      • 连接其他数据类型
    • 1.4 提取字符串信息
      • 获取字符串长度length()
      • 获取指定位置的字符 charAt()
      • 获取子字符串索引位置 indexOf()
      • 判断字符串首尾内容 startsWith()/endsWith()
      • 获取字符数组 toCharArray()
      • 判断子字符串是否存在 contains()
    • 1.5 字符串操作
      • 截取字符串 substring()
      • 字符串替换 replace()
      • 字符串分割 split()
      • 大小写转换 toLowerCase()/toUpperCase()
      • 去除空白内容 trim()
      • 比较字符串是否相等 equals()
  • 2、StringBuffer类
    • 2.1 创建对象
    • 2.2 追加字符序列 append()
    • 2.3 修改指定索引处的字符 setCharAt()
    • 2.4 插入字符串 insert()
    • 2.5 字符串反序 reverse()
    • 2.5 删除字符串 delete()

1、String类

1.1 声明字符串

字符串是常量,他们可以显示任何文字信息,字符串的值在创建后不能更改。Java语言中双引号的内容表示字符串,单引号的内容表示字符。
Java通过java.lang.String这个类来创建可以保存字符串的变量,所以字符串变量是一个对象。

声明字符串变量:

String a;
String a,b;
  • 在不给字符串赋值的情况下,其默认值是NULL。如果调佣String的方法,则会发生空指针异常。

1.2 创建字符串 =

对字符串变量赋值:

  1. 引用字符串常量
String a = "时间就是金钱";
String str1, str2;
str1 = "good good study";
str2 = "day day up";
  1. 利用构造方法实例化
String a = new String("I like motorcycle!");
String b = new String(a);
  1. 利用字符数组实例化
char[] charArray = {'t','i','m','e'};
String a = new String(charArray);
  1. 提取字符数组中的一部分创建字符串对象
char[] charArray = {'t','i','m','e'};
String a = new String(charArray, 1, 2);  //从第1个索引开始,提取两个元素

1.3 字符串连接 +/+=

连接字符串

使用"+”和"+=”运算符可以实现多个字符串的连接,并产生一个String对象

public class StringConcatenation{public static void main(String[] args){String a = "时间就是金钱";String a = "浪费时间可惜";String c = a + ',' + b;String d = "珍惜每时每刻,做有意义的事情。";d += c;                             //d = d + c ; 连接字符串 System.out.printIn("a=" + a);System.out.printIn("a=" + a);System.out.printIn("a=" + a);System.out.printIn("a=" + a);}
}

Note:

  1. Java中相连的字符串不能直接分成两行,如果字符串太长需要分成两行,利用+进行连接。但是连接两个字符串后,原先的字符串不会发生变化。但是在内存中会生成一个新的字符串。字符串是常量,在内存中是不可改变的。
    在这里插入图片描述

  2. String自带的concat()可以实现将指定字符串连接到此字符串结尾的功能。

a.concat(str);   //a为原字符串,str原字符串末尾拼接的字符串

连接其他数据类型

字符串也可以同其他基本数据类型进行连接。如果将字符串同这些数据类型的数据进行连接,会将这些数据直接转换成字符串。
Note:

  1. 只要“+”运算符的一个操作数是字符串,编译器就会将另一个操作数转换成字符串形式,使用时需要谨慎。
  2. 字符串在计算公式中的先后顺序会影响运算结果。先到先得
String a = "1"+ 2 + 3 + 4;     // “1234”
String b = 1 + 2 + 3 + "4";     // “64”
String a = "1"+ (2 + 3 + 4);     // “19”

1.4 提取字符串信息

获取字符串长度length()

length()方法会返回字符串数量,获取字符串长度,也就是char的数量。

str.length();//example
String num = "12345 67890";
int size = num.length();    //11

Note:字符串的length()方法与数组的length属性都是用来获取长度,但是两者是不同的:一个是方法,一个是成员属性。

获取指定位置的字符 charAt()

charAt(int index)方法用来获取指定索引的字符。

str.charAt(index);  //str任意字符串对象;index为char值的索引

Note:索引是从0开始的。

获取子字符串索引位置 indexOf()

indexOf()方法返回的是搜索的字符或字符串在字符串中首次出现的索引位置,如果没有索引到查找的字符或字符串,则返回-1.

str.indexOf(substr);  //str任意字符串对象;substr为要搜索的字符或字符串String str = "We are the team";
int addr = str.indexOf('e');    //值为1

Note:

  1. 应用场景:日常开发中,经常会遇到判断一个字符串是否包含在某个字符或者某个子字符串中的情况,此时采用indexOf()方法。

判断字符串首尾内容 startsWith()/endsWith()

startsWith()方法和endsWith()方法分别用于判断字符串是否以指定的内容开始或结束,这两个方法的返回值都是boolean类型。

str.startsWith(prefix);   //str为任意字符串;prefix为作为前缀的字符串
str.endsWith(suffix);   //str为任意字符串;suffix指定的后缀的字符串

获取字符数组 toCharArray()

toCharArray()方法可以将字符串转换成一个字符数组。

str.toCharArray();  //str为任意字符串
public class StringToArray{public static void main(String[] args){String str= "这是一个字符串";      //创建一个字符串char[] ch = str.toCharArray();    //将字符串转换为字符数组for(int i = 0;i < ch.length;i++){    //遍历字符数组System.out.printIn("数组第" + i + "个元素为:" + ch[i]);   //输出数组元素}}
}

判断子字符串是否存在 contains()

contains()方法可以判断字符串中是否包含指定的内容,返回值为true和false.

str.contains(string);   //str:任意字符串;string:查询的子字符串

1.5 字符串操作

截取字符串 substring()

substring()方法返回一个新字符串,他是此字符串的一个子字符串。该字符串从指定的beginIndex处的字符开始,直到索引endIndex-1处的字符。

str.substring(beginIndex);
str.substring(beginIndex, endIndex);   //str:任意字符串;beginIndex:起始索引(包括);endIndex:结束索引(不包括)

字符串替换 replace()

replace()方法可以实现将指定的字符序列替换成新的字符序列。

str.replace(oldstr, newstr);   //str:任意字符串;oldstr:要被替换的字符串;newstr:替换后的字符串

Note:

  1. replace()方法返回的是一个新的字符串。如果字符串str中没有找到需要替换的字符串序列oldstr,则将原字符串返回。
  2. 如果出现多次,则全部替换。
  3. 大小写要一致才能替换,如果不一致不能替换。

字符串分割 split()

split()方法可根据给定的分隔符对字符串进行拆分,支持正则表达式,最后返回一个字符串数组。

str,split(regex);   //str:任意字符串;regex:分隔符表达式。

大小写转换 toLowerCase()/toUpperCase()

str.toLowerCase();    //转换为小写
str.toUpperCase();    //转换为大写

Note:转化成功后,返回一个新的字符串。

去除空白内容 trim()

trim()方法可以将字符串首尾处的空白内容删除。

str.trim(); //str:任意字符串

比较字符串是否相等 equals()

当且仅当进行比较的字符串不为null,并且与被比较的字符串内容相同时,结果为true.

a.equals(str);   //a:任意字符串;str:进行比较的字符串。

Note:

  1. 字符串比较中“==”和“equals()”不同,前者不仅需要内容相同还需要地址相同,后者只需要存储内容相同。
  2. String str = null;和String str = “ ”是两种不同的概念。前者是空指针,不指向任何位置;后者表示是一个“ ”字符串,分配了内存空间的。

2、StringBuffer类

String创建的字符串是不可变的;StringBuffer类创建的字符串序列是可修改的,且实体容量会随着存放的字符串增加而自动增加。
在这里插入图片描述
StringBuffer类是线程安全的可变字符序列,一个类似于String类的字符串缓冲区,StringBuffer的执行效率比String高。

2.1 创建对象

StringBuffer sbf= new StringBuffer();       //创建一个对象没有初始值
StringBuffer sbf = new StringBuffer("abc"); //创建一个对象,初始值为abc
StringBuffer sbf = new StringBuffer(32);   //创建一个对象,初始容量为32个字符

2.2 追加字符序列 append()

append()方法可将参数转化为字符串,然后追加到此序列中。

sbf.append(obj);      //sbf:任意StringBuffer对象;obj:任意数据类型的对象,String/int/double/Boolean。

2.3 修改指定索引处的字符 setCharAt()

sbf.setCharAt(index, ch);  // sbf:任意StringBuffer对象;index:被替换字符的索引;ch:替换后的字符。

2.4 插入字符串 insert()

插入后,后面的内容往后面延。不会覆盖数据

sbf.insert(offset, str);   // sbf:任意StringBuffer对象;offset:插入的索引;str:插入的字符串。

2.5 字符串反序 reverse()

StringBuffer sbf=new StringBuffer("同一个世界,同一个梦想");
sbf=sbf.reverse();      //想梦个一同,界世个一同

2.5 删除字符串 delete()

delete()方法可以移除此序列的子字符串中的字符。该字符串是从指定的索引start处开始,一直到end-1处,如果end-1超出索引范围,则一直到序列尾部。如果start=end,则不会生变化。

sbf.delete(start,end);sbf:任意StringBuffer对象;start:启始索引;end:结束索引(不包含)
  • 其他方法
    在这里插入图片描述

相关文章:

5 Java字符串操作

字符串操作 1、String类1.1 声明字符串1.2 创建字符串 1.3 字符串连接 /连接字符串连接其他数据类型 1.4 提取字符串信息获取字符串长度length()获取指定位置的字符 charAt()获取子字符串索引位置 indexOf()判断字符串首尾内容 startsWith()/endsWith()获取字符数组 toCharArra…...

【C++习题】17.二分查找算法_二分查找

文章目录 二分查找算法简介题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解总结朴素二分模板 二分查找算法简介 特点&#xff1a; 二分查找算法&#xff0c;是最恶心&#xff0c;细节最多&#xff0c;最容易写出死循环的算法。&#xff08;而且非常难…...

Spring Boot英语知识网站:架构与开发

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…...

Unity ShaderLab 实现网格爆炸

实现思路&#xff1a; 沿着3D物体每个面的法线&#xff0c;将面偏移一定的位置。 Shader Graph实现如下&#xff1a; Shader Lab 实现如下&#xff1a; Shader "Unlit/MeshExplode" {Properties{_MainTex ("Texture", 2D) "white" {}_Distan…...

2024/11/28学习日志

为了更好地记录并反思自己的学习状况&#xff0c;将每日学习的内容、时长、心得等记录于此日志。 于9月3日开始记录&#xff0c;计划每日记录&#xff0c;希望至少能够坚持一个学期。 学习内容&#xff1a; 数据结构&#xff1a; 拓扑排序。关键路径。 马原&#xff1a; 马…...

在shardingsphere执行存储过程

环境&#xff1a; springboot&#xff1a;2.5.2 数据库&#xff1a;Kingbase金仓V8R6 依赖&#xff1a; <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId></depende…...

1.文件目录操作

目录 &#x1f34c; ls - 列出目录内容 &#x1f349;cp - 复制文件或目录 &#x1f347;mv - 移动或重命名文件 &#x1f353; cd - 切换目录 &#x1f348; pwd - 打印工作目录 &#x1f352;mkdir - 创建目录 &#x1f351; rmdir - 删除空目录 &#x1f96d; touc…...

Vue单页面应用和多页面应用

在 Vue.js 中&#xff0c;“单页面”&#xff08;SPA&#xff0c;Single Page Application&#xff09;和"多页面"&#xff08;MPA&#xff0c;Multi Page Application&#xff09;是两种不同的应用结构&#xff0c;它们的差异主要体现在页面的加载方式、路由的使用、…...

Lombok :简化 Java 编程的得力工具

在 Java 开发过程中&#xff0c;常常需要编写大量的样板代码&#xff0c;例如构造函数、Getter 和 Setter 方法、equals 和 hashCode 方法等。这些代码虽然逻辑相对固定&#xff0c;但编写起来却较为繁琐且容易出错&#xff0c;并且会使代码显得冗长。Lombok 应运而生&#xff…...

AIGC引领金融大模型革命:未来已来

文章目录 金融大模型的应用场景1. **金融风险管理**2. **量化交易**3. **个性化投资建议**4. **金融欺诈检测和预防**5. **智能客户服务** 金融大模型开发面临的挑战应对策略《金融大模型开发基础与实践》亮点内容简介作者简介获取方式 在AIGC&#xff08;Artificial Intellige…...

DBA面试题-1

面临失业&#xff0c;整理一下面试题&#xff0c;找下家继续搬砖 主要参考&#xff1a;https://www.csdn.net/?spm1001.2101.3001.4476 略有修改 一、mysql有哪些数据类型 1&#xff0c; 整形 tinyint,smallint,medumint,int,bigint&#xff1b;分别占用1字节、2字节、3字节…...

用go语言写一个小服务

文章目录 简介重新想到go 小服务main.go部署测试 结束语 简介 golang的优势 响应速度&#xff1a; Go > Java > Python 内存占用&#xff1a; Go < Java < Python 从java转go&#xff0c;然后go又转java&#xff0c;感觉就是go虽然在编译、内存占用都强于java&am…...

亚马逊开发视频人工智能模型,The Information 报道

根据《The Information》周三的报道&#xff0c;电子商务巨头亚马逊&#xff08;AMZN&#xff09;已开发出一种新的生成式人工智能&#xff08;AI&#xff09;&#xff0c;不仅能处理文本&#xff0c;还能处理图片和视频&#xff0c;从而减少对人工智能初创公司Anthropic的依赖…...

WordCloud参数的用法:

-------------词云图集合------------- 用WordcloudPyQt5写个词云图生成器1.0 WordCloud去掉停用词&#xff08;fit_wordsgenerate&#xff09;的2种用法 通过词频来绘制词云图&#xff08;jiebaWordCloud&#xff09; Python教程95&#xff1a;去掉停用词词频统计jieba.toke…...

qml调用c++类内函数的三种方法

一.方法一&#xff1a;使用 Q_INVOKABLE 宏声明成员函数 1.第一步&#xff1a;依然需要新建一个类NetworkHandler: #include <QObject> class NetworkHandler : public QObject { Q_OBJECT public: explicit NetworkHandler(QObject *parent nullptr); Q_INVOKAB…...

NLP任务四大范式的进阶历程:从传统TF-IDF到Prompt-Tuning(提示词微调)

引言&#xff1a;从TF-IDF到Prompt-Tuning&#xff08;提示词微调&#xff09;&#xff0c;NLP的四次变革 自然语言处理&#xff08;NLP&#xff09;技术从最早的手工特征设计到如今的Prompt-Tuning&#xff0c;经历了四个重要阶段。随着技术的不断发展&#xff0c;我们的目标…...

GAMES101:现代计算机图形学入门-笔记-09

久违的101图形学回归咯 今天的话题应该是比较轻松的&#xff1a;聊一聊在渲染中比较先进的topics Advanced Light Transport 首先是介绍一系列比较先进的光线传播方法&#xff0c;有无偏的如BDPT&#xff08;双向路径追踪&#xff09;&#xff0c;MLT&#xff08;梅特罗波利斯…...

【Db First】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列 &#x1f…...

MySQL聚合查询分组查询联合查询

#对应代码练习 -- 创建考试成绩表 DROP TABLE IF EXISTS exam; CREATE TABLE exam ( id bigint, name VARCHAR(20), chinese DECIMAL(3,1), math DECIMAL(3,1), english DECIMAL(3,1) ); -- 插入测试数据 INSERT INTO exam (id,name, chinese, math, engli…...

告别照相馆!使用AI证件照工具HivisionIDPhotos打造在线证件照制作软件

文章目录 前言1. 安装Docker2. 本地部署HivisionIDPhotos3. 简单使用介绍4. 公网远程访问制作照片4.1 内网穿透工具安装4.2 创建远程连接公网地址 5. 配置固定公网地址 前言 本文主要介绍如何在Linux系统使用Docker快速部署一个AI证件照工具HivisionIDPhotos&#xff0c;并结合…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...