String类及其工具类
一、String类
1.字符串对象
String str = new String("hello");
String对象是final修饰的,不可修改的,修改后的字符串对象是另外一个对象,只是修改了引用地址。每次创建都会创建一个新的对象。
2. 字面量
String s = "hello";
存储在方法区常量池中,只有1份。
3. 创建方式
①new String(“abc”);
②String str = “abc”;
③char[] chs = {‘a’, ‘b’, ‘c’};
④String(char[] chs);
⑤String(char[] value, int offset, int count);
⑥String(byte[] bytes);
⑦String(byte[] bytes, String charsetName);//按编码格式转换
⑧String str = “” + 任何类型;对象会调用toString()方法
二、String的常用方法
1. 基本操作
| 函数名 | 作用 |
|---|---|
| isEmpty() | 字符是否为空 |
| length | 返回字符的个数 |
| concat() | 拼接字符串,等价于+ |
| equals() | 比较两个字符串是否相等 |
| equalsIgnoreCase() | 忽略大小写比较大小 |
| compareTo() | 返回int, 正数大于,负数小于,0相等 |
| compareToIgnoreCase() | 忽略大小写 |
| toLowerCase() | 转换为小写字母 |
| toUpperCase() | 转换为大写字母 |
| trim() | 去掉字符串前后空白符 |
2. 查找
| 函数名 | 作用 |
|---|---|
| contains(String str) | 是否包含另一个字符串str |
| indexOf(String str) | 查找另一个字符串第一次出现的位置 |
| lastIndexOf(String str) | 查找另一个字符串最后 出现的位置 |
| indexOf(String str, int from) | 从某个位置开始查找另一个字符串第一次出现的位置 |
3. 字符串截取
| 函数名 | 作用 |
|---|---|
| subString(int begin) | 从begin开始截取一个字符串 |
| subString(int begin, int end) | 按区间截取,左闭右开 |
| lastIndexOf(String str) | 查找另一个字符串最后 出现的位置 |
| indexOf(String str, int from) | 从某个位置开始查找另一个字符串第一次出现的位置 |
4. 字符相关
| 函数名 | 作用 |
|---|---|
| charAt() | 获取字符串相应位置的字母 |
| toCharArray() | 将字符串转换为一个新的字符串数组 |
| String(char[] value) | 将字符串数组转换为字符串 |
| String(char[] chs, int offset, int count) | 从某个位置开始转换为字符串返回 |
| copyValueOf(char[] data) | 静态方法,字符数组变字符串 |
| copyValueOf(char[] data, int offset, int count) | 将部分数组转换为字符串 |
5. 编码与解码
| 函数名 | 作用 |
|---|---|
| getBytes() | 编码:把字符串变成字节数组 |
| getBytes(编码方式) | 编码:按编码格式进行转换 |
| String(byte[] bytes) | 解码:把字节数组转换为字符串 |
| String(byte[] bytes, String codingSet) | 解码:按指定格式进行解码 |
6. 字符串格式匹配(正则)
| 函数名 | 作用 |
|---|---|
| startWith(String str) | 是否以str开头 |
| endWith(String str) | 是否以str结尾 |
| matches(String regex) | 使用正则表达式验证字符串 |
| 正则表达式 | 含义 |
|---|---|
| [0-9] | 表示0到9之间的任意一个数值 |
| \d | 数字 |
| \D | 非数值 |
| \w | 字符 |
| \W | 非字符 |
| + | 出现1次或多次 |
| ? | 1次或0次 |
| * | 任意次 |
| { n } | 出现n次 |
| {5,10} | 5到10次 |
| {5,} | 至少5次 |
7. 替换与拆分
| 函数名 | 作用 |
|---|---|
| replace(String str, String str2) | 将字符串中的str替换成str2 |
| replaceFirst(String 正则, value) | 替换第一个匹配部分的字符串 |
| replaceAll(String regex, value) | 替换所有匹配部分 |
| split(String regex) | 按照某种规则进行拆分,支持正则 |
注: “abc”拆分为“a”, “b”,“c” = s.split(“|”)
三、字符串的内存
1. 内存分析

考察例题:

解析:
只有两个字面常量使用加号连接,编译器自动优化为一个字母量,其余情况都会创建一个新的对象。

String变量加final修饰时就可以当做字面常量,编译器也会自动优化,不会创建新的对象。

这个是编译后的字节码文件,参考底层代码可以看到一些我们无法发现的细节。

2. intern方法
用来检查该字符串常量在字符串常量池中是否有该字符串常量, 有的话直接返回该字符串, JDK8之后,没有的话将自己的引用放进去后再返回一个字符串,没有创建新的字符串对象。JDK6之前,如果没有的话,在字符串常量池中创建一个副本并返回。
String s = "hello";
String intern = s.intern();//这句代码在堆中和字符串常量池中都创建了对象
String s = new String("hello");
String intern = s.intern();
四、StringBuffer和StringBuilder
1. 与String的区别
需要频繁修改字符串时,可以使用可变长字符串。该类型字符串修改时不需要创建新的字符串对象。StringBuffer是线程安全的,StringBuilder是线程不安全的。
2. 常用方法
①append(String str): 拼接字符串,返回值还是StringBuilder自己本身。
②reverse(): 字符串反转。
③toString(): 返回一个String对象。
④new StringBuilder(str): 将字符串转换为StringBuilder对象。
相关文章:
String类及其工具类
一、String类 1.字符串对象 String str new String("hello");String对象是final修饰的,不可修改的,修改后的字符串对象是另外一个对象,只是修改了引用地址。每次创建都会创建一个新的对象。 2. 字面量 String s "hello&…...
踩坑(5)整合kafka 报错 java.net.UnknownHostException: 不知道这样的主机
java.net.UnknownHostException: 不知道这样的主机。 (5c0c3c629db9)at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:na]at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:933) ~[na:na]at java.ba…...
rust持续学习 get_or_insert_with
通常使用一个值 if(xnull)xsome_valid_value 忽然今天看见一段代码 pub fn get_id() -> u64 { let mut res struct.data.borrow_mut(); *res.get_or_insert_with(||{let mut xx ...... some logiclet id xx.id; id}); }感觉这个名字蛮奇怪的 insert 然后翻了一下代码&a…...
卡尔曼滤波 | Matlab实现无迹kalman滤波仿真
文章目录 效果一览文章概述研究内容程序设计参考资料效果一览 文章概述 卡尔曼滤波 | Matlab实现无迹kalman滤波仿真 研究内容 无迹kalman滤波(UKF)不是采用的将非线性函数线性化的做法。无迹kalman仍然采用的是线性kalman滤波的架构,对于一步预测方程,使用无迹变换(UT)来…...
C++---list常用接口和模拟实现
list---模拟实现 list的简介list函数的使用构造函数迭代器的使用list的capacitylist element accesslist modifiers list的模拟实现构造函数,拷贝构造函数和迭代器begin和endinsert和eraseclear和析构函数 源码 list的简介 list是用双向带头联表实现的一个容器&…...
[openCV]基于赛道追踪的智能车巡线方案V1
import cv2 as cv import os import numpy as npimport time# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir:文件夹根目录输入 ext: 扩展名返回: 文件路径列表""&quo…...
SpringIoc-个人学习笔记
Spring的Ioc、DI、AOP思想 Ioc Ioc思想:Inversion of Control,控制反转,在创建Bean的权利反转给第三方 DI DI思想:Dependency Injection,依赖注入,强调Bean之间的关系,这种关系由第三方负责去设…...
【一文搞懂泛型】
3.3泛型 3.3.1泛型出现的背景 泛型出现的背景有两点: 第一点是在集合容器中,如果没有指定对应类型的话,那么底层的元素就是object,要对容器中的元素进行存取的时候,取出来的同时需要进行类型转换,如果有…...
概念解析 | 利用MIMO雷达技术实现高性能目标检测的关键技术解析
注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:MIMO雷达目标检测技术 参考资料:何子述, 程子扬, 李军, 等. 集中式 MIMO 雷达研究综述[J]. 雷达学报, 2022, 11(5): 805-829. 利用MIMO雷达技术实现高性能目标检测的关键技术解…...
Grafana制作图表-自定义Flink监控图表
简要 有时候我们在官网的Grafana下载的图表是这样的,如下图 #算子的处理时间,就是处理数据的延迟数据抓取,这个的说明看下下面的文章 metrics.latency.interval: 60 metrics.reporter.promgateway.class: org.apache.flink.metrics.prometh…...
【TypeScript】初识TypeScript和变量类型介绍
TypeScript 1,TypeScript是什么?2,类型的缺失带来的影响3,Ts搭建环境-本博主有专门的文章专说明这个4,使用tsc对ts文件进行编译5,TS运行初体验简化Ts运行步骤解决方案1解决方案2(常见) 开始学习…...
阿里云瑶池 PolarDB 开源官网焕新升级上线
导读近日,阿里云开源云原生数据库 PolarDB 官方网站全新升级上线。作为 PolarDB 开源项目与开发者、生态伙伴、用户沟通的平台,将以开放、共享、促进交流为宗旨,打造开放多元的环境,以实现共享共赢的目标。 立即体验全新官网&…...
泡水书为什么不能再出售
近日,京津冀持续强降雨,多家出版机构位于涿州等地的图书库房受到影响。 中图网11日发文称,其位于涿州的仓储中心被洪水淹了,一库房有400多万册的书籍。 网友纷纷在文章下暖心留言:注意人身安全,泡水的书也…...
Mac 执行 .sh命令报错 command not found
使用终端执行.sh命令,可输入: ./FileName.sh如果提示 Permission denied 权限不足,可增加sudo,命令如下: sudo ./FileName.sh如果提示 command not found 可以这样: chmod ux *.sh sudo ./FileName.sh...
postgresql 使用之 存储架构 触摸真实数据的存储结构以及组织形式,存入数据库的数据原来在这里
存储架构 专栏内容: postgresql内核源码分析 手写数据库toadb 并发编程 个人主页:我的主页 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 概述 postgresql 数据库服务运行时,数据在磁…...
Node.Js安装与配置教程
目录 1.下载官网 2.选择安装路径 3.添加环境变量 4.验证是否安装成功 5.修改模块下载位置 (1)查看npm默认存放位置 6.在node.js安装目录下,创建两个文件夹 7.修改默认文件夹 8.测试默认位置是否更改成功 9.安装报错解决办法 10.路径未更改成功解决办法 …...
Element-Plus DatePicker获取时间戳
文章目录 0、先上答案1、渔?1-1 Element-Plus 官网1-2 溯源 Day.js 0、先上答案 <!-- 秒 --><el-date-pickerv-model"timeStamp"type"datetime"value-format"X"/><!-- 毫秒 --><el-date-pickerv-model"tim…...
【算法第十五天7.29】513.找树左下角的值 112. 路径总和 106.从中序与后序遍历序列构造二叉树
链接力扣513-找树左下角的值 思路 class Solution {public int findBottomLeftValue(TreeNode root) {Queue<TreeNode> queue new LinkedList<>();queue.offer(root);int res 0;while(!queue.isEmpty()){int size queue.size();for(int i 0; i < size; i)…...
Java thymeleaf bug排查记录
刚学Java 做项目时报了一个错误 一时间看的莫名其妙 EL1008E: Property or field createTime cannot be found on object of type java.util.HashMap - maybe not public or not valid? 随即向上排查至第一个报错,发现是thymeleaf渲染时报错。 Exception proces…...
互感和励磁电感(激磁电感)的关系
互感器,变压器,他们之间有着千丝万缕的联系,自感,互感,激磁电感,漏感、耦合系数、理想互感器、理想变压器,这些东西的概念理解和相互之间的关系式。都搞明白了吗?...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
