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修饰时就可以当做字面常量,编译器也会自动优化,不会创建新的对象。

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对象。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

首批获得金融级行业云平台认证,天翼云深耕行业云

云计算下半场看什么? 无疑是金融、政务、制造等传统政企用户的上云与用云。随着数字经济发展和产业数字化的提速,上云已是政企用户推动其数字化转型不断深入的重要抓手,成为不可阻挡的趋势。 与互联网用户相比,政企用户上云极为…

uni-app——下拉框多选

一、组件components/my-selectCheckbox.vue <template><view class"uni-stat__select"><span v-if"label" class"uni-label-text">{{label &#xff1a;}}</span><view class"uni-stat-box" :class"…

mediasoup Lite ICE实现说明

目录 一. 前言 二. Lite ICE流程 三. STUN协议说明 STUN Header STUN Body 四. mediasoup Lite ICE实现源码剖析 一. 前言 ICE 是一种交互式建立连接的流程协议。ICE 有两种模式&#xff08;Full ICE 和 Lite ICE&#xff09;&#xff0c;Full ICE 要求建立连接的双方都要…

ruoyi若依 组织架构设计--[ 角色管理 ]

ruoyi若依 组织架构设计--[ 角色管理 ] 角色新增后端代码 角色修改后端代码 角色查询角色删除角色分配数据权限后端代码 角色分配用户 角色新增 后端代码 有一点&#xff0c;我认为新增的时候&#xff0c;也需要修改redis中的权限。 角色修改 后端代码 因为修改了role_menu表了…

坚鹏:中国邮储银行金融科技前沿技术发展与应用场景第2期培训

中国邮政储蓄银行金融科技前沿技术发展与应用场景第2期培训圆满结束 中国邮政储蓄银行拥有优良的资产质量和显著的成长潜力&#xff0c;是中国领先的大型零售银行。2016年9月在香港联交所挂牌上市&#xff0c;2019年12月在上交所挂牌上市。中国邮政储蓄银行拥有近4万个营业网点…

hcip——期中小试

要求&#xff1a; 1、该拓扑为公司网络&#xff0c;其中包括公司总部、公司分部以及公司骨干网&#xff0c;不包含运营商公网部分。 2 、设备名称均使用拓扑上名称改名&#xff0c;并且区分大小写。 3 、整张拓扑均使用私网地址进行配置。 4 、整张网络中&#xff0c;运行 O…

Unity Sort Group(排序组)

** Unity 中的Sort Group组组件允许让Sprite Renderer(精灵渲染器)重新决定渲染顺序. ** 作为组件存在 组件内容&#xff1a; Unity 使用Sort Group 组件的Sort layer 和Order in layer的值来确定排序组在渲染队列内相对与场景内其他排序组和游戏对象的优先级。 属性功能So…

最新2024届【海康威视】内推码【GTK3B6】

最新2024届【海康威视】内推码【GTK3B6】 【内推码使用方法】 1.请学弟学妹们登录校招官网&#xff0c;选择岗位投递简历&#xff1b; 2.投递过程中填写内推码完成内推步骤&#xff0c;即可获得内推特权。 内推码&#xff1a;GTK3B6 内推码&#xff1a;GTK3B6 内推码&…

【Python】基础数据结构:列表——元组——字典——集合

文章目录 一、简述二、Python中的列表详解2.1 创建列表2.2 访问列表元素2.3 修改列表元素2.4 列表切片2.5 列表方法2.6 列表推导式 三、Python中的元组详解3.1 创建元组3.2 访问元组元素3.3 元组是不可变的3.4 元组切片3.5 元组方法 四、Python中的字典详解4.1 创建字典4.2 访问…

ES6基础知识十:你是怎么理解ES6中 Decorator 的?使用场景?

一、介绍 Decorator&#xff0c;即装饰器&#xff0c;从名字上很容易让我们联想到装饰者模式 简单来讲&#xff0c;装饰者模式就是一种在不改变原类和使用继承的情况下&#xff0c;动态地扩展对象功能的设计理论。 ES6中Decorator功能亦如此&#xff0c;其本质也不是什么高大…

避免安装这5种软件,手机广告频繁弹窗且性能下降

在我们使用手机的日常生活中&#xff0c;选择合适的应用软件对于保持良好的使用体验至关重要。然而&#xff0c;有些软件可能会给我们带来不必要的麻烦和困扰。特别是那些频繁弹窗广告、导致手机性能下降的应用程序&#xff0c;我们应该尽量避免安装它们。 首先第一种&#xf…

VR实景导航——开启3D可视化实景导航新体验

数字化时代&#xff0c;我们大家出门在外都是离不开各种导航软件&#xff0c;人们对导航的需求也越来越高&#xff0c;而传统的导航软件由于精度不够&#xff0c;无法满足人们对真实场景的需求&#xff0c;这个时候就需要VR实景导航为我们实景指引目的地的所在。 VR实景导航以其…

【数理知识】协方差,随机变量的的协方差,随机变量分别是单个数字和向量时的协方差

序号内容1【数理知识】自由度 degree of freedom 及自由度的计算方法2【数理知识】刚体 rigid body 及刚体的运动3【数理知识】刚体基本运动&#xff0c;平动&#xff0c;转动4【数理知识】向量数乘&#xff0c;内积&#xff0c;外积&#xff0c;matlab代码实现5【数理知识】协…

使用WebMvcConfigurationSupport后导致原来返回的json数据变为了xml的解决方法

问题 未使用WebMvcConfigurationSupport拦截时返回的数据都是JSON格式&#xff0c;使用WebMvcConfigurationSupport做拦截后数据的返回变为了XML的格式。 原因 在Spring框架中&#xff0c;WebMvcConfigurationSupport 是一个类&#xff0c;它可以用于自定义Spring MVC的配置…

P1833 樱花(多重背包)(内附封面)

樱花 题目背景 《爱与愁的故事第四弹plant》第一章。 题目描述 爱与愁大神后院里种了 n n n 棵樱花树&#xff0c;每棵都有美学值 C i ( 0 ≤ C i ≤ 200 ) C_i(0 \le C_i \le 200) Ci​(0≤Ci​≤200)。爱与愁大神在每天上学前都会来赏花。爱与愁大神可是生物学霸&#…

代码分析:循环创建N个子进程——为什么最后一个属于父进程?

黑马C/C 2018年32期代码分析 //循环创建n个子进程 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h>int main() {int i 0;for(i0; i<3; i){//创建子进程pid_t pid fork();if(pid&…

Qt实现可伸缩的侧边工具栏(鼠标悬浮控制伸缩栏)

Qt实现可伸缩的侧边工具栏 一直在网上找&#xff0c;发现大多的实现方案都是用一个按钮&#xff0c;按下控制侧边栏的伸缩&#xff0c;但是我想要实现鼠标悬浮在侧边栏的时候就伸出&#xff0c;移开就收缩的功能&#xff0c;也没找到好的参考&#xff0c;所以决定自己实现一个…

QT中使用ffmpeg的api进行视频的播放

在了解ffmpeg使用api进行视频的播放之前&#xff0c;我们首先了解一下视频的播放流程。 一、视频的播放流程 首先是我们最常见的视频文件&#xff0c;在播放流程中首先是要打开视频文件&#xff0c;将视频文件中的数据进行解封装&#xff0c;之后再将解封装之后的视频进行解码…

【LeetCode】287. 寻找重复数

287 . 寻找重复数&#xff08;中等&#xff09; 方法 快慢指针 思路 要解决这道题首先要理解如何将输入的数组看作为链表。对于数组 nums 中的数字范围在 [1, n]&#xff0c;考虑两种情况&#xff1a; 如果数组中没有重复的数字&#xff0c;以 [1, 3, 4, 2] 为例&#xff0c;将…

FPGA优质开源项目 - UDP RGMII千兆以太网

本文介绍一个FPGA开源项目&#xff1a;UDP RGMII千兆以太网通信。该项目在我之前的工作中主要是用于FPGA和电脑端之间进行图像数据传输。本文简要介绍一下该项目的千兆以太网通信方案、以太网IP核的使用以及Vivado工程源代码结构。 Vivado 的 Tri Mode Ethernet MAC IP核需要付…