Java:字符串String详解(用法+例子)

news2024/11/23 21:32:24

目录

    • String
      • 字符串拼接
      • 字符串截取
      • 与数字相接
      • 不可变字符串
      • 检测字符串是否相等
      • 字符串常量池
      • 空串和null串
      • 码点与代码单元
      • String API
      • 字符串数组
      • 构建字符串
      • buffer机制
      • String、StringBuilder、StringBuffer 区别
    • 比特流、网络流、文件流

String

字符串拼接

除了基本类型都叫引用类型。

public class Test{
	public static void main(String[] xxx){
		String x1 = "abcdef";
		String x2 = "12314";
		System.out.println(x1 + x2);

	}
}

在这里插入图片描述
引用类型同样类型的大小就不一样了。
任何引用类型都由基本类型组成。

字符串截取

public class Test{
	public static void main(String[] xxx){
		String x1 = "abcdef";
		String x2 = "012314";
		String x3 = x2.substring(2, 4);
		System.out.println(x3);

	}
}

substring(2,5); // [2, 4)
在这里插入图片描述

与数字相接

public class Test{
	public static void main(String[] xxx){
		String x1 = "abcdef";
		String x2 = "012314";
		String x3 = x2.substring(2, 4);
		System.out.println(x3);

		String x6 = "afd" + 33;
		int a = 90;
		float b= 234.34f;
		String x7 = x6 + a + b;
		System.out.println(x7);

	}
}

在这里插入图片描述

不可变字符串

由于长度会发生改变,不能在原地修改,所以引用指向别的地方。
在这里插入图片描述

检测字符串是否相等

经常用C++的可能会使用 ==
而在java中 == 只能判断位置是否相等。
在java中判断字符串相等使用equal。

equals 给字符串比较的时候是值,给其他引用类型比较时,仍然是地址。

字符串常量池

字符串创建时,先从常量池中寻找,要是有的话就不再创建了,而是指向它。
但如果 是 new 出来的,则它是与众不同的,不进入常量池中,而是单独创建。
在这里插入图片描述
在这里插入图片描述

空串和null串

空串和null串并不相同:
空串""是有空间的,而null是空引用不占空间。

码点与代码单元

public class Test{
	public static void main(String[] xxx){
		String x1 = "abcdefghijklmn";
		int w1 = x1.length(); // 获取字符串的长度
		char w2 = x1.charAt(3); // 获取第四个字符
		int w3 = x1.codePointAt(3);	// 获取第四个字符编码
		int w4 = w2; // 这种获取编码的方式比较好记
		System.out.println(w1);
		System.out.println(w2);
		System.out.println(w3);
		System.out.println(w4);
	}
}

在这里插入图片描述

String API

api:相当于一个帮助文档,可以查询现成的方法如何使用。

一些常用的:
在这里插入图片描述
在这里插入图片描述
通过看api就能知道对应如何使用:

public class Test{
	public static void main(String[] xxx){

		String s1= "abcdefg";
		String s2 = "def";
		String s3 = s1.replace("cd","kk"); //替换
		int idx = s1.indexOf(s2); //子串起始位置
		System.out.println(idx);
		System.out.println(s3);			

	}
}

在这里插入图片描述

字符串数组

string.split(t) 根据t切割,返回字符串数组。

构建字符串

有些时候,需要由较短的字符串构建字符串,例如,按键或来自文件中的单词。采用字符串连接的方式达到此目的效率比较低。每次连接字符串,都会构建一个新的 String 对象 ,既耗时 , 又浪费空间。

使用 StringBuilder 类就可以避免这个问题的发生。
在需要构建字符串时就凋用 toString 方法,将可以得到一个 String 对象,其中包含了构建器中的字符序列。
StringBuilder();
toString();

public class Test{
	public static void main(String[] xxx){

		String a = "adsf";
		a = a + "adfsdg";
		
		StringBuilder b = new StringBuilder();
		b.append("dfdf");
		b.append("sdvfsv");

		System.out.println(a);
		System.out.println(b.toString());				

	}
} 

在这里插入图片描述
简单对比一下时间:

public class Test{
	public static void main(String[] xxx){

		long start = System.currentTimeMillis();
		String a ="";
		for (int i = 0; i < 10000; i++){
			a +="a";
		}
		long end = System.currentTimeMillis();
		
		long start1 = System.currentTimeMillis();
		StringBuilder b = new StringBuilder();
		for (int i = 0; i < 10000; i++){
			b.append("a");
		}
		long end1 = System.currentTimeMillis();

		System.out.println(end - start);
		System.out.println(end1 - start1);
	}
}

在这里插入图片描述
明显快很多很多。

时间戳currentTimeMillis()
所有计算机都是从1970年01月01日08时00分00秒开始计算的。

buffer机制

分页:是把整个虚拟和物理内存空间切成一段段固定尺寸的大小。即划分逻辑地址空间至固定大小的页(Page),划分物理内存空间至固定大小的帧(Frame),并建立方案,转换逻辑地址为物理地址(pages to frames)。在 Linux 下,每一页的大小通常为 4KB。

StringBuilder 比 String 快的原因:
多个单个变量存储在多个页中,数组中的多个元素可以存在一个页中,一个页是4KB。 // 这里写的不一定对。有知道的可以纠正一下。
所以实际上的内存占用要比想象中多的多。

String字符串不可变,每次改变都要占用4kb大小去储存新的,这样内存会浪费很多,内存压力大,运行速度自然也会很慢。
而StringBuilder内存可以指定。会提前申请8kb的足够空间,每次修改就可以有充足的空间在原地址修改,自然就快了。

底层就是开辟一个较大的数组。
StringBuffer 底层就是char 数组。
像这种提前申请空间节省内存的机制叫做 buffer 机制
在这里插入图片描述
在这里插入图片描述
常用来处理文件流,网络流。

流:本质就是基本类型数组。

String、StringBuilder、StringBuffer 区别

StringBuffer 里面加了锁,保障多线程下的安全,速度稍微慢一丢丢。也差不多,都是远远快于String。

比特流、网络流、文件流

在这里插入图片描述
上面也说了流本质就是基本类型数组
如:byte二进制每8位存进数组一个数、
short二进制每16位存入数组一个数。其他与之类似。
一般都用byte数组是一个万能数组,因为其他类型都是他的倍数。
例如8位还原成32位:
在这里插入图片描述

文件流:文件以二进制存储,通过上述方式解析成数组后,通过编码再次解析,显示在我们的屏幕上。 不同文件的头部会有不同固定的bit来记录是哪种编码。
网络流:与文件流相同的原理。

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

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

相关文章

python 笔记:you-get

下载视频/音乐/图片 使用pip安装you-get pip3 install you-get 之后在命令行执行下载操作 1 主要命令行参数 -n --no-merge 如果视频分p&#xff0c;不进行合并--no-caption不下载弹幕、歌词等 -f --force 覆盖已存在的文件 -F STREAM_ID --format STREAM_ID 指定视频下载…

TypeError: issubclass() arg 1 must be a class

在使用spacy加载模型时报错&#xff0c;错误&#xff1a;TypeError: issubclass() arg 1 must be a class 解决方法 降低spacy的版本&#xff0c;我之前是3.5.3&#xff0c;降到3.5.2即可。

Monocular 3D Object Detection with Depth from Motion 论文学习

论文链接&#xff1a;Monocular 3D Object Detection with Depth from Motion 1. 解决了什么问题&#xff1f; 从单目输入感知 3D 目标对于自动驾驶非常重要&#xff0c;因为单目 3D 的成本要比多传感器的方案低许多。但单目方法很难取得令人满意的效果&#xff0c;因为单张图…

[Volo.Abp升级笔记]使用旧版Api规则替换RESTful Api以兼容老程序

Volo.Abp 配置应用层自动生成Controller&#xff0c;增删查改服务&#xff08;CrudAppService&#xff09;将会以RESTful Api的方式生成对应的接口 (官方文档)&#xff0c;这与旧版本的Abp区别很大。RESTful固然好&#xff0c;虽然项目里新的Api会逐步使用RESTful Api代替旧的&…

JavaScript运算符

减法运算符 在JavaScript中&#xff0c;我们可以使用简单的减法来计算一下你的出生年龄&#xff0c;例如&#xff1a; const zhangSan 2023 - 2000; console.log(zhangSan);● 当然&#xff0c;我们也可以在控制台中&#xff0c;一次性传入多个值&#xff1b; const zhangS…

测试模型中理解压力测试和负载测试

压力测试 对应的性能测试模式就是固定线程&#xff0c;通过使用固定线程的模式对服务进行性能测试&#xff0c;或者使用阶梯型的线程递增模式进行性能测试。 通过控制线程数来进行不同场景的测试。 关注指标&#xff1a;处理能力&#xff08;QPS或者说TPS&#xff09;&#…

matplotlib绘制点线图

代码&#xff1a; import numpy as np import matplotlib.pyplot as pltX, Y (np.linspace(-3, 3, 100),np.linspace(-3, 3, 100))U, V np.mgrid[-3:3:100j, 0:0:100j]seed_points np.array([[-2, 0, 1], [-2, 0, 1]])fig0, ax0 plt.subplots() strm ax0.streamplot(X, Y…

阿里云GPU服务器价格表(A100、A10、V100、T4)

阿里云GPU服务器租用费用表包括包年包月、一个小时收费以及学生GPU服务器租用费用&#xff0c;阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡&#xff0c;GPU云服务器gn6i可享受3折&#xff0c;阿里云百科分享阿里云GPU服务器租用表、GPU一个小时多少…

Java集合类都有哪些?

Collection 是所有单列集合的父类 Map 是所有双列集合的父类&#xff0c;一次添加一对元素 单列集合 上图中&#xff0c;蓝色是实现类&#xff0c;红色是接口 Collection 下面分为两种单列集合 -- List 、 Set List 集合 List 下又分为三种 -- ArrayList 、 LinkList 、 …

react的state和useState你了解多少?带你深入react state useState

state和useState是react中很重要的概念&#xff0c;虽然笔者一直在用&#xff0c;但是总感觉有些地方认识不够透彻。于是乎&#xff0c;笔者重新阅读学习了react官方文档&#xff0c;感觉受益匪浅。希望能用尽量通俗简洁的语言把吸收的知识表述清楚&#xff0c;便写下此文。 如…

二、DDL-3.数据类型

分为3种&#xff1a;数值类型、字符串类型、日期时间类型。 一、数值类型 【案例】 年龄&#xff1a; age TINYINT UNSIGNED——范围&#xff08;0&#xff0c;255&#xff09;够用 分数&#xff1a;score double(4,1)——分数0-100有小数&#xff0c;4—最高位数&#xff0…

学习开闭原则的方法:成为编程高手的秘诀

成为一名优秀的编程高手&#xff0c;掌握开闭原则是至关重要的。开闭原则是软件设计中的核心概念之一&#xff0c;它能够帮助我们构建可扩展、可维护的代码&#xff0c;提升自身的编程水平。在本文中&#xff0c;我们将分享学习开闭原则的方法&#xff0c;揭示成为编程高手的秘…

记android studio打包踩雷

由于包太大考虑离线打包但是折腾一通打包完之后才发现&#xff0c;如果使用了插件市场上面的付费插件 离线打包时走不通的&#xff0c;只能老老实实付费云打包。

数据结构--图的存储 十字链表、邻接多重表

数据结构–图的存储 十字链表、邻接多重表 十字链表存储有向图 空间复杂度&#xff1a;O(|V||E|) 如何找到指定顶点的所有出边&#xff1f;——顺着绿色线路找 如何找到指定顶点的所有入边&#xff1f;——顺着橙色线路找 注意&#xff1a;十字链表只用于存储有向图 \color{re…

杨辉三角 II

给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1] 示例 2: 输入: rowIndex 0 输出: [1] 示例 3: 输入: rowIndex 1 输出: [1,1]…

redis 相关

redis相关面试题 redis支持哪几种数据形式&#xff1f; String,hash,set,zset,list redis主要消费什么物理资源&#xff1f; 内存&#xff0c;key-value的形式&#xff0c; redis 具有快速和数据持久化的特征&#xff0c;如果不将数据放在内存中&#xff0c;磁盘 I/O 速度为严…

实现视频监控场景下的抽烟目标检测:改进 YOLOv5 的关键方法与代码实现

文章目录 概要技术细节小结 概要 目标检测是计算机视觉领域的重要任务之一&#xff0c;而改进现有的目标检测模型以实现对细微差异目标的准确检测是当前研究的热点。本文将探讨如何通过对 YOLOv5 进行改进&#xff0c;以增强其对细微差异目标的感知能力。我们将介绍一些关键方…

CN期刊《教师博览》是什么级别的刊物?

CN期刊《教师博览》是什么级别的刊物&#xff1f; 《教师博览》创刊于1993年&#xff0c;经国家新闻出版总署批准&#xff0c;江西省教育厅主管的省级G4学术期刊。 《教师博览》 是江西教育厅主管、江西教育期刊社主办的一份面向全国发行的教育杂志&#xff0c;其文摘版创办于…

pdf怎么分成多个文件?教你4招PDF拆分!

有时候&#xff0c;我们可能需要将一个包含多个页面的PDF文件拆分成多个独立的文件。这样做可以方便我们在需要的时候单独查看或处理某些页面&#xff0c;提高工作效率。本文将介绍四种常用的方法来将PDF文件分割成多个文件&#xff0c;包括使用Adobe Acrobat、记灵在线工具、P…

地埋式积水在线监测系统助力城市内涝解决方案

一、方案背景 随着我国城镇化快速发展&#xff0c;城市建设产生的大量地面硬底化&#xff0c;大部分的降雨将形成地表径流&#xff0c;仅有少量雨水渗入地下&#xff0c;导致城市内涝等一系列问题。当前&#xff0c;全国多地发生洪涝&#xff0c;我国南北方全面进入主汛期。与往…