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…...

互感和励磁电感(激磁电感)的关系
互感器,变压器,他们之间有着千丝万缕的联系,自感,互感,激磁电感,漏感、耦合系数、理想互感器、理想变压器,这些东西的概念理解和相互之间的关系式。都搞明白了吗?...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...