调皮的String及多种玩法(下部)

👨‍💻作者简介:👨🏻‍🎓告别,今天

📔高质量专栏 :☕java趣味之旅

欢迎🙏点赞🗣️评论📥收藏💓关注

💖衷心的希望我的📙作品能给大家带来收获。

🎊前言:

让我们如大自然般🌱悠然自在😊地生活一天吧,
别因为有坚果外壳或者蚊子翅膀落在铁轨上🛤️而翻了车🚆。让我们该起床时🛏️就赶紧起床🛏️,
该休息🛏️时就安心休息🛏️,
保持安宁而没有烦扰的心态;身边的人要来就让他来,要去就让他去,
让钟声🕰️回荡,让孩子👼哭喊—
下定决心好好地过一天。


🙏希望大家都可以过好每一天。也🙏希望我的博客,能给大家带来💯收获。

1. String的进阶方法 

1.1 字符串替换

使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下:

代码示例: 字符串的替换处理 

 public static void main(String[] args) {String str = "hihihello" ;String ret = str.replace('h','p');//替换所有第一个字符,为第二个参数System.out.println(ret);String ret1 = str.replace("hi","ppp");//可以替换字符串System.out.println(ret1);String ret2 = str.replaceAll("hi","pt");System.out.println(ret2);String ret3 = str.replace("hi","pu");//替换第一个内容System.out.println(ret3);System.out.println(str);}

 

 注意事项: 由于字符串是不可变对象, 替换不修改当前字符串, 而是产生一个新的字符串.

 1.2 字符串拆分

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。

可用方法如下:

代码示例: 实现字符串的拆分处理 

String str = "hello world hello wanwan";String[] result = str.split(" ");//分割之后存入数组中for (String s:result) {System.out.println(result);}

 代码示例: 字符串的部分拆分

 public static void main(String[] args) {String str = "hello world hello wanwan";String[] result1 = str.split(" ",2);//limit限定分格几组for (String s:result1) {System.out.println(result1);}//拆分两部分并不是从中间拆分,而是从第一个空格,进行拆分String[] result2 = str.split(" ",10);for (String s:result2) {System.out.println(result2);}}

如果分割次数超出最大次数,结果以最大分割次数呈现 

代码示例: 拆分IP地址

String str = "192.168.1.1" ;
String[] result = str.split(".") ;
for(String s: result) {
System.out.println(s);
}
String[] result1 = str.split("\\.") ;
for(String s: result1) {
System.out.println(s);
}
String str1 = "192\\168\\1\\1";
String[] ret2 = str1.sqlit("\\\\");
for(String s: result2) {
System.out.println(s);
String str2 = "name=zhangnasan&age=10";
String[] ret3 = str1.sqlit("&|=");
for(String s: result3) {
System.out.println(s);
}

 

注意事项:

1. 字符"|","*","+"都得加上转义字符,前面加上 "\\" .

2. 而如果是 "\" ,那么就得写成 "\\\\" .

3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.

 1.3 字符串截取

从一个完整的字符串之中截取出部分内容。可用方法如下:

代码示例: 观察字符串截取

String str = "helloworld" ;
System.out.println(str.substring(5)); 从指定索引截取到结尾
System.out.println(str.substring(0, 5));截取部分内容

 

注意事项:

1. 索引从0开始.这里如果传入的是0下标,那么默认回原来的对象

2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标

1.4 其他操作方法                                                                                                                                                  

代码示例: 观察trim()方法的使用 

String str = " hello world " ;
System.out.println("["+str+"]");
System.out.println("["+str.trim()+"]")

trim 会去掉字符串开头和结尾的空白字符(空格, 换行, 制表符等).

代码示例: 大小写转换

String str = " hello%$$%@#$%world 哈哈哈 " ;
System.out.println(str.toUpperCase());
System.out.println(str.toLowerCase());

 这两个函数只转换字母。

2. 字符串的特性

2.1 字符串的不可变性

String是一种不可变对象. 字符串中的内容是不可改变。字符串不可被修改,是因为:

1. String类在设计时就是不可改变的,String类实现描述中已经说明了

以下来自JDK1.8String类的部分实现:

 

 

 String类中的字符实际保存在内部维护的value字符数组中,该图还可以看出:

1. String类被final修饰,表明该类不能被继承

2. value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。//通过第三张图可以看出

2.所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象

纠正】网上有些人说:字符串不可变是因为其内部保存字符的数组被final修饰了,因此不能改变。

 这种说法是错误的,不是因为String类自身,或者其内部valuefinal修饰而不能被修改。

final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的

public static void main(String[] args) {
final int array[] = {1,2,3,4,5};
array[0] = 100;
System.out.println(Arrays.toString(array));
// array = new int[]{4,5,6}; // 编译报错:Error:(19, 9) java: 无法为最终变量array分配值
}

 那如果想要修改字符串中内容,该如何操作呢?

2.2 字符串修改

注意:尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下。

public static void main(String[] args) {
String s = "hello";
s += " world";
System.out.println(s); // 输出:hello world
}

 但是这种方式不推荐使用,因为其效率非常低,中间创建了好多临时对象。

public static void main(String[] args) {
long start = System.currentTimeMillis();
String s = "";
for(int i = 0; i < 10000; ++i){
s += i;
}
long end = System.currentTimeMillis();//获取当前系统的时间戳
System.out.println(end - start);
start = System.currentTimeMillis();
StringBuffer sbf = new StringBuffer("");
for(int i = 0; i < 10000; ++i){
sbf.append(i);
}
end = System.currentTimeMillis();
System.out.println(end - start);
start = System.currentTimeMillis();
StringBuilder sbd = new StringBuilder();
for(int i = 0; i < 10000; ++i){
sbd.append(i);
}
end = System.currentTimeMillis();
System.out.println(end - start);
}

可以看待在对String类进行修改时,效率是非常慢的,因此:尽量避免对String的直接需要,如果要修改建议尽量使用StringBuffer或者StringBuilder

b. 借助StringBuffer StringBuilder

 

🎊总结

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

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

相关文章

LeetCode 面试经典150题 26.删除有序数组中的重复项

题目&#xff1a; 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量…

C# SM2加解密 ——国密SM2算法

SM2 是国家密码管理局组织制定并提出的椭圆曲线密码算法标准。 本文使用第三方密码库 BouncyCastle 实现 SM2 加解密&#xff0c;使用 NuGet 安装即可&#xff0c;包名&#xff1a;Portable.BouncyCastle&#xff0c;目前最新版本为&#xff1a;1.9.0。 using Org.BouncyCastl…

相机sd卡照片删除后数据恢复,相机sd卡中的照片被删除后如何恢复数据

当我们使用相机拍摄照片时&#xff0c;有时会不小心删除了一些重要的照片。这可能是因为误操作、SD卡故障或者其他原因。无论是珍贵的照片、还是重要的工作文件&#xff0c;被删除后&#xff0c;我们往往会感到焦虑和失望。相机sd卡中的照片被删除后如何恢复数据&#xff1f;幸…

Java项目:54 springboot工资信息管理系统453

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统的使用角色可以被分为用户和管理员&#xff0c; 用户具有注册、查看信息、留言信息等功能&#xff0c; 管理员具有修改用户信息&#…

洛谷P1097 [NOIP2007 提高组] 统计数字

#先看题目 题目描述 某次科研调查时得到了 n 个自然数&#xff0c;每个数均不超过 1.5109。已知不相同的数不超过 个&#xff0c;现在需要统计这些自然数各自出现的次数&#xff0c;并按照自然数从小到大的顺序输出统计结果。 输入格式 共 n1 行。 第一行是整数 n&#x…

24年三月周末总结

工作 我在工作上有一个毛病&#xff0c;就是不能很好的控制精力和情绪&#xff0c;我需要学习精力管理和情绪管理。 目前工作不会有什么起色&#xff0c;计划今年7月份&#xff08;全栈工程师&#xff09;转移到成都。 精力管理 可以在B站查阅这个视频进行学习精力管理 学习…

函数返回二维数组

在C语言中&#xff0c;函数不能直接返回二维数组&#xff0c;因为数组名作为函数参数或返回值时&#xff0c;会退化为指向数组首元素的指针。此外&#xff0c;C语言不支持返回局部数组的引用&#xff0c;因为局部数组在函数返回后其内存会被释放。 1. 使用动态内存分配&#…

Kafka-SSL笔记整理

创建密钥仓库以及CA 创建密匙仓库,用户存储证书文件keytool -keystore server.keystore.jks -alias hello_kafka -validity 100000 -genkey创建CAopenssl req -new -x509 -keyout ca-key -out ca-cert -days 100000将生成的CA添加到客户端信任库keytool -keystore client.trus…

SPI驱动分析之二

三、主控制器的驱动注册 文件spi_imx.c中 subsys_initcall(spi_imx_init); static int __init spi_imx_init(void) { return platform_driver_register(&spi_imx_driver); } static struct platform_driver spi_imx_driver { .driver { .name DR…

InfluxDB下载安装教程

InfluxDB下载安装教程 一、简介二、【linux】InfluxDB下载安装配置2.1 下载安装2.1.1 apt在线安装2.1.2 离线安装 2.2 配置及启动 3、windows 下的安装方式4、InfluxDB基本使用4.1 创建用户4.2 数据库 回到目录 一、简介 InfluxDB是一个由InfluxData开发的开源时序型数据库。它…

串行通信——IIC和SPI应用场景区别

1.区别描述 SPI&#xff08;Serial Peripheral Interface&#xff09;和I2C&#xff08;Inter-Integrated Circuit&#xff0c;也称IC&#xff09;都是串行通信接口&#xff0c;但它们在应用上确实存在一些重叠之处&#xff0c;同时也各有特点和适用场景&#xff1a; SPI的主…

软件之禅(十)数据库

黄国强 2024/03/16 说点题外话&#xff0c;写程序是个非常有意思的智力游戏&#xff0c;想到业内很多人把这么一个智力游戏变成体力劳动&#xff0c;颇有些唏嘘。 回到正题&#xff0c;继续我对软件的思考。我是80年代的大学生&#xff0c;当时学的是dBASE数据库。毕业…

前端之CSS 创建css--行内引入、内联样式、外联样式

创建css有三种创建样式&#xff0c;行内引入、内联引入、外联引入。 行内引入 在行内标签引入 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>行内样式</title> </head> <body>…

php中 0 == ‘’(0等于任意字符串) 判断是否成立 返回true

php中不同类型变量之间比较大小 一、背景二、探究0是为什么&#xff1f;三、探究 0all是为什么&#xff1f;四、程序中如何判断0是否等于指定字符串 一、背景 最近在项目实际开发中&#xff0c;我需要判断前端传来的参数值是否等于一个字符串&#xff1b;然后发现当参数值是0时…

element-plus怎么修改表单中的label字体颜色及大小

问题描述&#xff1a; 当我们在vue3中使用element-plus组件库提供的表单组件时&#xff0c;有时我们需要修改表单中label的字体颜色等属性&#xff0c;这是如果直接选中label的class进行修改是不起作用的&#xff0c;我们只需深度选择即可选中并进行修改。 比如&#xff1a; …

IO Watch:用 Arduino UNO 制造的可编程手表

MAKER:mblaz/译:趣无尽 Cherry(转载请注明出处) 关于手表的项目,之前我们已经介绍过一款《Arduino + 3D 打印 DIY 电子手表》。本期的项目同样的一款基于 Arduino UNO 的可编程的手表,相比之下制造门槛更高一些。同时它更成熟、实用,外形也很有设计感,非常的漂亮! 这…

【打工日常】使用Docker部署团队协作文档工具

一、ShowDoc介绍 ​ShowDoc是一个适合IT团队共同协作API文档、技术文档的工具。通过showdoc&#xff0c;可以方便地使用markdown语法来书写出API文档、数据字典文档、技术文档、在线excel文档等等。 响应式网页设计&#xff1a;可将项目文档分享到电脑或移动设备查看。同时也可…

vue2中 因响应式原理采用Object.defineProperty数据劫持 导致几种方式改变数据页面 不重新渲染的解决办法

1. vue2 中通过索引修改数组数据不会重新渲染页面 使用数组方法可重新渲染页面 <template><div><ul><li v-for"item in names" :key"item">{{ item }}</li></ul><div><button click"replaceRoles"…

WXML 模板语法

数据绑定 1. 数据绑定的基本原则 ① 在 data 中定义数据 在页面对应的 .js 文件中&#xff0c;把数据定义到 data 对象中即可 ② 在 WXML 中使用数据 2. Mustache 语法的格式 把 data 中的数据绑定到页面中渲染&#xff0c;使用 Mustache 语法&#xff08;双大括号&#x…

SpringBoot jar包在后台运行,关闭cmd窗口程序不关闭

如果你想在运行 jar 文件后保留命令行窗口不关闭&#xff0c;你可以在运行 jar 文件时在命令行中使用 pause 命令。例如&#xff1a; java -jar myjarfile.jar pause 1 2 3 这样&#xff0c;在 jar 文件运行完后&#xff0c;命令行窗口会暂停&#xff0c;并显示一…