全面深入学习Java中的字符串类

二、字符串类

(一)String

String:字符串

concat() --- 在末尾追加字符串,返回新的字符串

substring(int begindex) --- 从指定下标处截取到字符串末尾,并返回新的字符串

substring(int begindex,endindex) --- 从开始下标(包含)处截取到结束下标(排他)处,并返回新的字符串

toLowerCase() --- 转小写,并返回新的字符串

toUpperCase() --- 转大写,并返回新的字符串

trim() --- 去除首位空格,并返回新字符串

replace() --- 替换字符,并返回新字符串

replaceFirst() --- 替换第一次出现的字符串,并返回新字符串

replaceAll() --- 替换字符串,并返回新字符串

indexOf() --- 获取字符串第一次出现的下标

lastIndexOf() --- 获取字符串最后一次出现的下标

charAt() --- 获取指定下标上的字符

equals() --- 判断两个字符串是否相同

equalsIgnoreCache() --- 判断两个字符串是否相同(不区分大小写)

startwith() --- 判断是否以某字符串开头

endwith() --- 判断是否以某字符串结束

toCharArry() --- 将字符串转换为字符数组

valueOf() --- 将其他类型转换为字符串类型

(二)StringBuffer

StringBuffer:变长字符串

append() --- 将字符串追加到末尾

insert() --- 将字符串插入到指定下标的位置

replace() --- 从开始下标(包含)处替换到结束下标(排他)处的字符串

delete() --- 从开始下标处(包含)删除到结束下标处(排他)的字符串

deleteCharAt() --- 删除指定下标处的字符

reverse() --- 反转字符串

(三)StringBuilder

使用与StringBuffer相同。

(四)深入String
1、创建对象

(1).描述下列代码创建多个少String对象?

String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str2);//true

只有一个String对象。因为abc为字面值常量,存放在常量池中,又常量值不能重复,因此只有一个abc字符串对象

(2).描述下列代码创建多个少String对象?

String str3 = new String("abc");
String str4 = new String("abc");
System.out.println(str3 == str4);//false

有三个对象,分别是“abc”+new出来的两个String对象

2、字符串拼接问题

(1).常量拼接

//两个常量,在编译时直接拼接
String str3 = "ab"+"c";
System.out.println(str1 == str3);//true

"ab"、"c"作为常量在编译过程中直接拼接,最终为“abc”。从中也可以看出,在此过程中一共有三个常量“ab”、“c”、“abc”

//两个常量,在编译时直接拼接
final String s1 = "ab";
final String s2 = "c";
String str4 = s1+s2;
System.out.println(str1 == str2);//true

final修饰变量,使变量变成常量,和上一个情况一样

(2).变量拼接

String s3 = "ab";
String s4 = "c";
String str5 = s3 + s4;//底层:new StringBuidler(String.valueOf(s3)).append(s4).toString();
System.out.println(str1 == str5);//false

两个变量,底层创建StringBuilder对象做拼接,"=="则判断两个对象的内存地址是否相同,显然不同

3、字符串频繁拼接问题

对于多次拼接的情况下,如果使用“+”来进行拼接,那么当次数达到一定时,程序运行的速度将会非常慢

//获取1970.1.1 0:0:0到现在的毫秒数(1000毫秒=1秒)//long currentTimeMillis = System.currentTimeMillis();
​
long startTime = System.currentTimeMillis();
​
String str = "hh";
for (int i = 0; i < 100000; i++) {
​
str += "yyyyy";//底层实现:
//  str = str + "yyyyy";
//  str = new StringBuilder(String.valueOf(str)).append("yyyyy").toString();
}
​
long endTime = System.currentTimeMillis();
​
System.out.println("运行时间:"+(endTime-startTime));//13752

对于拼接,其底层逻辑是不断创建StringBuilder对象,当拼接次数过多时,程序运行时间就会过长

采用append方法来解决这个问题

long startTime = System.currentTimeMillis();StringBuilder sb = new StringBuilder();
sb.append("hhh");
for (int i = 0; i < 100000; i++) {sb.append("yyyy");
}
​
long endTime = System.currentTimeMillis();
​
System.out.println("运行时间:"+(endTime-startTime));//5

但是,使用append方法对于特别大量的数据时,还是不能解决该问题。因为appen方法中,当元素个数超过数组容量时,就会进行扩容,扩容创建新的数组,浪费时间

最好的解决方法是,根据需求,一开始就初始化一个比需求大的数组容量,从而避免减少底层容器的伸缩性(减少底层容器的扩容次数)

long startTime = System.currentTimeMillis();StringBuilder sb = new StringBuilder(10000000);
sb.append("hhh");
for (int i = 0; i < 100000; i++) {sb.append("yyyy");
}
​
long endTime = System.currentTimeMillis();
​
System.out.println("运行时间:"+(endTime-startTime));//0

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

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

相关文章

OceanBase 中一个关于 NOT IN 子查询的 SQL 优化案例

通过一个案例了解 not in 对 NULL 值敏感的处理逻辑和优化方法。 作者&#xff1a;胡呈清&#xff0c;爱可生 DBA 团队成员&#xff0c;擅长故障分析、性能优化&#xff0c;个人博客&#xff1a;[简书 | 轻松的鱼]&#xff0c;欢迎讨论。 爱可生开源社区出品&#xff0c;原创内…

Linux中账号登陆报错access denied

“Access denied” 是一个权限拒绝的错误提示&#xff0c;意味着用户无法获得所请求资源的访问权限。出现 “Access denied” 错误的原因可以有多种可能性&#xff0c;包括以下几种常见原因&#xff1a; 错误的用户名或密码&#xff1a;输入的用户名或密码不正确&#xff0c;导…

机器学习—1.快速入门

机器学习步骤 确定与问题相关的输入&#xff08;明确输入&#xff09;收集与问题相关的数据&#xff08;数据准备&#xff0c;学&#xff09;分析预测结果的类型&#xff08;分类&#xff1f;回归&#xff1f;是判断题还是应用题&#xff09;根据预测记过的类型&#xff0c;选…

http添加SSL证书后打开变成另外一个网站是怎么回事

当在使用http的网站上添加了SSL证书后&#xff0c;如果打开该网站时出现了另外一个网站&#xff0c;可能是由以下几种情况引起的&#xff1a; 错误的证书配置 证书配置可能存在错误&#xff0c;导致SSL连接时服务器返回了错误的证书&#xff0c;或者证书与网站域名不匹配。这…

MySQL-系统及自定义变量

详情系统变量信息参考MySQL官方文档 系统变量分类&#xff1a; 全局系统变量&#xff08;global&#xff09; 全局系统变量针对于所有会话&#xff08;连接&#xff09;有效&#xff0c;但 不能跨重启 会话系统变量&#xff08;session&#xff09; 仅针对当前连接有效&am…

STM32-模数转化器

ADC(Analog-to-Digital Converter) 指模数转换器。是指将连续变化的模拟信号转换 为离散的数字信号的器件。 ADC相关参数说明&#xff1a; 分辨率&#xff1a; 分辨率以二进制&#xff08;或十进制&#xff09;数的位数来表示&#xff0c;一般有 8 位、10 位、12 位、16 位…

Transformer模型-decoder解码器,target mask目标掩码的简明介绍

今天介绍transformer模型的decoder解码器&#xff0c;target mask目标掩码 背景 解码器层是对前面文章中提到的子层的包装器。它接受位置嵌入的目标序列&#xff0c;并将它们通过带掩码的多头注意力机制传递。使用掩码是为了防止解码器查看序列中的下一个标记。它迫使模型仅使用…

WPF 多语言切换及ResourceDictionary的Source路径填写

WPF 多语言切换 1. 添加资源字典 新增两个资源字典&#xff0c;里面分别存储不同语言的文本 <ResourceDictionary xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s…

DRBD双主模式自动化安装部署脚本

DRBD&#xff08;Distributed Replicated Block Device&#xff09;是一种分布式存储系统&#xff0c;它允许在网络中的两个或多个节点之间复制数据。在本例中&#xff0c;我们为两个节点&#xff08;node1和node2&#xff09;设置DRBD&#xff0c;使其运行在双主模式下。 注意…

使用API有效率地管理Dynadot域名,确认域名转移流程状态

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

虚拟网络设备与网络安全:深入分析与实践应用

在数字化时代&#x1f4f2;&#xff0c;网络安全&#x1f512;成为了企业和个人防御体系中不可或缺的一部分。随着网络攻击的日益复杂和频繁&#x1f525;&#xff0c;传统的物理网络安全措施已经无法满足快速发展的需求。虚拟网络设备&#x1f5a7;&#xff0c;作为网络架构中…

k8s集群部署elasticsearch集群和elasticsearch集群设置用户密码

目录 一、背景&#xff1a; 二、部署elasticsearch集群&#xff1a; 1、部署elasticsearch集群&#xff1a; 2、验证elasticsearch集群是否正常&#xff1a; 三、部署elasticsearch集群并设置用户密码 1、生产elastic集群所需的证书&#xff1a; 2、重新建构elasticsearc…

计算机网络——39密钥分发和证书

密钥分发和证书 可信赖中介 对称密钥问题 相互通信的实体如何分享对称密式的密钥&#xff1f; 解决办法 trusted key distribution center(KDC) 在实体之间扮演可信赖中介的角色 公共密钥问题 当Alice获得Bob的公钥(from web site,e-mail,diskette)&#xff0c;她如何知…

16、普通数组-除自身以外的数组乘积

思路 通过辅助数组的方式 第一个从左向右的辅助数组乘积第二次从右向左的辅助数组乘积对于0<i<N-1 他的数组乘积就是左边的数组乘积*右边数组乘积然后再分类讨论i0 就是右边1-N-1的数组乘积iN-1就是左边从N-2到0的数组乘积 代码如下&#xff1a; class Solution {pub…

C# 优雅的处理 TCP 数据

前言 Tcp是一个面向连接的流数据传输协议&#xff0c;用人话说就是传输是一个已经建立好连接的管道&#xff0c;数据都在管道里像流水一样流淌到对端。 那么数据必然存在几个问题&#xff0c;比如数据如何持续的读取&#xff0c;数据包的边界等。 Nagles算法 Nagle 算法的核…

电商技术揭秘十五:数据挖掘与用户行为分析

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台…

vue2 使用vue-org-tree demo

1.安装 npm i vue2-org-tree npm install -D less-loader less安装 less-loader出错解决办法&#xff0c;直接在package.json》devDependencies下面加入less和less-loader版本&#xff0c;然后执行npm i &#xff0c;我用的nodejs版本是 16.18.0&#xff0c;“webpack”: “^4…

ubuntu 18.04 安装 OpenSSL libssl.so.1.1

在 Ubuntu 18.04 上安装 OpenSSL 的 libssl.so.1.1 库&#xff0c;通常意味着您需要安装 OpenSSL 1.1.x 版本或更高版本&#xff0c;因为 libssl.so.1.1 是 OpenSSL 1.1.x 系列的一部分。以下是安装 OpenSSL 1.1.x 并确保 libssl.so.1.1 可用的步骤&#xff1a; 1. 更新软件包…

群集服务器与主机托管区别

1、首先什么群集服务器? 通俗的来说,它是指很多台服务器把它们集中在一起来进行同一种服务&#xff0c;而在我们在客户端看&#xff0c;却只能看见一个服务器;集群服务器也可以由很多个的计算机并行去计算&#xff0c;这样可以获得非常高的计算速度;同时也可以用很多个计算机来…

Tomcat SSL/TLS Configuration

see https://tomcat.apache.org/tomcat-9.0-doc/ssl-howto.html//1:use jdk keytool A:Generate Keystore 01: C:\Users\User>keytool -genkey -alias tomcat -keyalg RSA -keystore d:/ks/tomcatKeyStore //也可参考:keytool -genkeypair -alias "tomcat" -k…