Java基础API(2) String、StringBuilder详解

news2024/10/5 13:11:48

文章目录

  • 🍸1. String类
    • 🍉🍉1.1 String概述
    • 🍉🍉1.2 String类的构造方法
    • 🍉🍉1.3 创建字符串对象的区别对比
    • 🍉🍉1.4 字符串的比较
      • 1.4.1 字符串的比较
    • 🍉🍉1.5 【应用】手机号屏蔽-字符串截取
    • 🍉🍉1.6 【应用】敏感词替换-字符串替换
    • 🍉🍉1.7 【应用】切割字符串
    • 🍉🍉1.8 String方法小结
  • 🍸2. StringBuilder类
    • 🍉🍉2.1 StringBuilder类概述
    • 🍉🍉2.2 StringBuilder类和String类的区别
    • 🍉🍉2.3 StringBuilder类的构造方法
    • 🍉🍉2.4 StringBuilder常用的成员方法
    • 🍉🍉2.5 【应用】StringBuilder和String相互转换


在这里插入图片描述


这篇文章继续探讨Java提供的API之 String、StringBuilder.

🍸1. String类

🍉🍉1.1 String概述

1 String 类在 java.lang 包下,所以使用的时候不需要导包
2 String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例也就是
说,Java 程序中所有的双引号字符串,都是 String 类的对象
3 字符串不可变,它们的值在创建后不能被更改


🍉🍉1.2 String类的构造方法


常用的构造方法

在这里插入图片描述

示例代码

public class Demo2StringConstructor {
	/*
		String类常见构造方法:
		public String() : 创建一个空白字符串对象,不含有任何内容
		public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
		public String(String original) : 根据传入的字符串内容,来创建字符串对象
		String s = “abc”; 直接赋值的方式创建字符串对象,内容就是abc
		注意:
		String这个类比较特殊, 打印其对象名的时候, 不会出现内存地址
		而是该对象所记录的真实内容. 答案:面向对象-继承, Object类
	*/
	public static void main(String[] args) {
		// public String() : 创建一个空白字符串对象,不含有任何内容
		String s1 = new String();
		System.out.println(s1);
		
		// public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
		char[] chs = {'a','b','c'};
		String s2 = new String(chs);
		System.out.println(s2);
		
		// public String(String original) : 根据传入的字符串内容,来创建字符串对象
		String s3 = new String("123");
		System.out.println(s3);
	}
}

🍉🍉1.3 创建字符串对象的区别对比


通过构造方法创建

通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值
不同


直接赋值方式创建

以 “str” 方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,
JVM 都只会建立一个 String 对象,并在字符串池中维护


常见面试题

String s1 = "abc";
String s2 = "abc";
s1 == s2 // true
String s1 = "abc";
String s2 = new String("abc");
s1 == s2 // false
String s1 = "java";
String s2 = "jav";
String s3 = s2 + "a"; // 变量 + 常量
s1 == s3 // false 字符串之间使用+号拼接的时候,系统底层会自创建一个StringBuilder对
象,拼接后再转String
String s1 = "java";
String s2 = "jav" + "a"; //常量 + 常量
s1 == s2 // true 虽然是+拼接,但是是常量在拼接,常量优化机制

🍉🍉1.4 字符串的比较

1.4.1 字符串的比较

== 比较基本数据类型:比较的是具体的值
== 比较引用数据类型:比较的是对象地址值

String类 : public boolean equals(String s) 比较两个字符串内容是否相同、区分大小写
代码 :

public class Demo1Equals {
	public static void main(String[] args) {
		String s1 = "abc";
		String s2 = "ABC";
		String s3 = "abc";
		
		// equals : 比较字符串内容, 区分大小写
		System.out.println(s1.equals(s2));
		System.out.println(s1.equals(s3));
		
		// equalsIgnoreCase : 比较字符串内容, 忽略大小写
		System.out.println(s1.equalsIgnoreCase(s2));
	}
}

🍉🍉1.5 【应用】手机号屏蔽-字符串截取


案例需求 :

以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽
最终效果为:1561234

实现步骤 :

🍁1. 键盘录入一个字符串,用 Scanner 实现
🍁2. 截取字符串前三位
🍁3. 截取字符串后四位
🍁4. 将截取后的两个字符串,中间加上进行拼接,输出结果


代码实现

import java.util.Scanner;
public class Test5 {
	public static void main(String[] args) {
		// 1. 键盘录入一个字符串,用 Scanner 实现
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入手机号:");
		String telString = sc.nextLine();
		
		// 2. 截取字符串前三位
		String start = telString.substring(0,3);
		
		// 3. 截取字符串后四位
		String end = telString.substring(7);
		
		// 4. 将截取后的两个字符串,中间加上****进行拼接,输出结果
		System.out.println(start + "****" + end);
	}
}

🍉🍉1.6 【应用】敏感词替换-字符串替换


案例需求 :

键盘录入一个 字符串,如果字符串中包含(TMD),则使用***替换


实现步骤 :
🍁1. 键盘录入一个字符串,用 Scanner 实现
🍁2. 替换敏感词
String replace(CharSequence target, CharSequence replacement)
将当前字符串中的target内容,使用replacement进行替换,返回新的字符串
🍁3. 输出结果


代码实现 :

import java.util.Scanner;
public class Test6 {
	public static void main(String[] args) {
		// 1. 键盘录入一个字符串,用 Scanner 实现
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入:");
		String s = sc.nextLine();
		// 2. 替换敏感词
		String result = s.replace("TMD","***");
		// 3. 输出结果
		System.out.println(result);
	}
}

🍉🍉1.7 【应用】切割字符串


案例需求 :

以字符串的形式从键盘录入学生信息,例如:“张三 , 23”
从该字符串中切割出有效数据,封装为Student学生对象


实现步骤 :

🍁1. 编写Student类,用于封装数据
🍁2. 键盘录入一个字符串,用 Scanner 实现
🍁3. 根据逗号切割字符串,得到(张三)(23)
String[] split(String regex) :根据传入的字符串作为规则进行切割
将切割后的内容存入字符串数组中,并将字符串数组返回
🍁4. 从得到的字符串数组中取出元素内容,通过Student类的有参构造方法封装为对象
🍁5. 调用对象getXxx方法,取出数据并打印。


代码实现 :

public class Test7 {
	public static void main(String[] args) {
		// 2. 键盘录入一个字符串,用 Scanner 实现
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入学生信息:");
		String stuInfo = sc.nextLine();
		// stuInfo = "张三,23";
		
		// 3. 根据逗号切割字符串,得到(张三)(23)
		String[] sArr = stuInfo.split(",");
		// System.out.println(sArr[0]);
		// System.out.println(sArr[1]);
		
		// 4. 从得到的字符串数组中取出元素内容,通过Student类的有参构造方法封装为对象
		Student stu = new Student(sArr[0],sArr[1]);
		// 5. 调用对象getXxx方法,取出数据并打印。
		System.out.println(stu.getName() + "..." + stu.getAge());
	}
}

🍉🍉1.8 String方法小结


String类的常用方法 :

public boolean equals(Object anObject) 比较字符串的内容,严格区分大小写

public boolean equalsIgnoreCase(String anotherString) 比较字符串的内容,忽略大小写

public int length() 返回此字符串的长度

public char charAt(int index) 返回指定索引处的 char 值

public char[] toCharArray() 将字符串拆分为字符数组后返回

public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字
符串(包含头,不包含尾)

public String substring(int beginIndex) 从传入的索引处截取,截取到末尾,得到新的字符串

public String replace(CharSequence target, CharSequence replacement) 使用新值,将字符串中
的旧值替换,得到新的字符串

public String[] split(String regex) 根据传入的规则切割字符串,得到字符串数组


🍸2. StringBuilder类

🍉🍉2.1 StringBuilder类概述


StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是
StringBuilder 对象中的内容是可变的


🍉🍉2.2 StringBuilder类和String类的区别

  • String类:内容是不可变的
  • StringBuilder类:内容是可变的

🍉🍉2.3 StringBuilder类的构造方法


常用的构造方法

方法名说明
public StringBuilder()创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象

示例代码

public class StringBuilderDemo01 {
	public static void main(String[] args) {
		//public StringBuilder():创建一个空白可变字符串对象,不含有任何内容
		StringBuilder sb = new StringBuilder();
		System.out.println("sb:" + sb);
		System.out.println("sb.length():" + sb.length());
		
		//public StringBuilder(String str):根据字符串的内容,来创建可变字符串对象
		StringBuilder sb2 = new StringBuilder("hello");
		System.out.println("sb2:" + sb2);
		System.out.println("sb2.length():" + sb2.length());
	}
}

🍉🍉2.4 StringBuilder常用的成员方法


添加和反转方法

方法名说明
public StringBuilder append(任意类型)添加数据,并返回对象本身
public StringBuilder reverse()返回相反的字符序列

示例代码

public class StringBuilderDemo01 {
	public static void main(String[] args) {
		//创建对象
		StringBuilder sb = new StringBuilder();
		//public StringBuilder append(任意类型):添加数据,并返回对象本身
		// StringBuilder sb2 = sb.append("hello");
		//
		// System.out.println("sb:" + sb);
		// System.out.println("sb2:" + sb2);
		// System.out.println(sb == sb2);
		// sb.append("hello");
		// sb.append("world");
		// sb.append("java");
		// sb.append(100);
		
		//链式编程
		sb.append("hello").append("world").append("java").append(100);
		
		System.out.println("sb:" + sb);
		
		//public StringBuilder reverse():返回相反的字符序列
		sb.reverse();
		System.out.println("sb:" + sb);
	}
}

🍉🍉2.5 【应用】StringBuilder和String相互转换


StringBuilder转换为String
public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String

String转换为StringBuilder
public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder


StringBuilder sb = new StringBuilder();
sb.append("hello");
//public String toString():通过 toString() 就可以实现把 StringBuilder 转换
//为 String
String s = sb.toString();

String s = "hello";
//public StringBuilder(String s):通过构造方法就可以实现把 String 转换为
//StringBuilder
StringBuilder sb = new StringBuilder(s);



在这里插入图片描述

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

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

相关文章

为企业打造的人脸美肤解决方案

随着人工智能和图像处理技术的飞速发展,美颜美肤技术在众多领域,特别是社交娱乐、电子商务和广告行业中的应用日益广泛。为了满足企业对于高质量图像处理的需求,美摄科技推出了一款先进的基础人脸美肤解决方案。 美摄科技的基础人脸美肤解决…

Pytorch 复习总结 3

Pytorch 复习总结,仅供笔者使用,参考教材: 《动手学深度学习》Stanford University: Practical Machine Learning 本文主要内容为:Pytorch 多层感知机。 本文先介绍了多层感知机的用法,再就训练过程中经常出现的过拟…

数据结构 计算结构体大小

一、规则: 操作系统制定对齐量: 64位操作系统,默认8Byte对齐 32位操作系统,默认4Byte对齐 结构体对齐规则: 1.结构体整体的大小,需要是最大成员对齐量的整数倍 2.结构体中每一个成员的偏移量需要存在…

IDEA 2021.3激活

1、打开idea,在设置中查找Settings/Preferences… -> Plugins 内手动添加第三方插件仓库地址:https://plugins.zhile.io搜索:IDE Eval Reset 插件进行安装。应用和使用,如图

合纵连横 – 以 Flink 和 Amazon MSK 构建 Amazon DocumentDB 之间的实时数据同步

在大数据时代,实时数据同步已经有很多地方应用,包括从在线数据库构建实时数据仓库,跨区域数据复制。行业落地场景众多,例如,电商 GMV 数据实时统计,用户行为分析,广告投放效果实时追踪&#xff…

pytorch: ground truth similarity matrix

按照真实标签排序pair-wise相似度矩阵的Pytorch代码 本文仅作留档,用于输出可视化 Inputs: Ground-truths Y ∈ R n 1 \mathbf{Y}\in\mathbb R^{n\times 1} Y∈Rn1, Similarity matrix A ∈ R n n \mathbf{A}\in\mathbb R^{n\times n} A∈RnnOutputs: Block dia…

【无标题】https://www.php.cn/faq/602417.html

https://www.php.cn/faq/602417.htmlTOC 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编…

Mysql系列之命令行登录、连接工具登录、数据库表常用命令

登录与常用命令 连接工具登录命令行登录数据库1、查看数据库2、指定数据库3、查看当前数据库4、建库语句 数据表1、查看数据表2、查看表结构信息3、查看建表语句4、建表语句 连接工具登录 首先下载mysql连接工具,解压后直接打开软件,按以下步骤操作&…

车载氢气浓度传感器为氢能源车保驾护航

最近,车载氢气浓度传感器成为了一个热门话题。作为一名对科技充满热情的汽车爱好者,我自然也对这个话题产生了浓厚的兴趣。那么,车载氢气浓度传感器到底是什么?它又是如何工作的呢?下面就让我为你一一揭秘。 首先&…

C++ Primer 笔记(总结,摘要,概括)——第7章 类

目录 ​编辑 7.1 定义抽象数据类型 7.1.1 设计Sales_data类 7.1.2 定义改进的Sales_data类 7.1.3 定义类相关的非成员函数 7.1.4 构造函数 7.1.5 拷贝、赋值和析构 7.2 访问控制和封装 7.2.1 友元 7.3 类的其他特性 7.3.1 类成员再探 7.3.2 返回*this的成员函数 7.3.3 类类…

大蟒蛇(Python)笔记(总结,摘要,概括)——第10章 文件和异常

目录 10.1 读取文件 10.1.1 读取文件的全部内容 10.1.2 相对文件路径和绝对文件路径 10.1.3 访问文件中的各行 10.1.4 使用文件的内容 10.1.5 包含100万位的大型文件 10.1.6 圆周率中包含你的生日吗 10.2 写入文件 10.2.1 写入一行 10.2.2 写入多行 10.3 异常 10.3.1 处理Ze…

SpringBoot整合POIExcel: 实现导入导出Excel功能

SpringBoot整合POIExcel: 实现导入导出Excel功能 SpringBoot整合POIExcel: 实现导入导出Excel功能摘要引言依赖Poi包结构读取Excel表格读取Excel表格写入Excel表格 实战测试导入表格导出表格代码实现细节 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f…

C++面向对象程序设计-北京大学-郭炜【课程笔记(四)】

C面向对象程序设计-北京大学-郭炜【课程笔记(四)】 1、this指针1.1、this指针的作用1.2、this指针和静态成员函数 2、静态成员变量和静态成员函数2.1、基本概念2.2、基本概念总结2.3、如何访问静态成员2.4、静态成员变量的使用场景(重要&…

stm32——hal库学习笔记(ADC)

这里写目录标题 一、ADC简介(了解)1.1,什么是ADC?1.2,常见的ADC类型1.3,并联比较型工作示意图1.4,逐次逼近型工作示意图1.5,ADC的特性参数1.6,STM32各系列ADC的主要特性 …

(done) Positive Semidefinite Matrices 什么是半正定矩阵?如何证明一个矩阵是半正定矩阵? 可以使用特征值

参考视频:https://www.bilibili.com/video/BV1Vg41197ew/?vd_source7a1a0bc74158c6993c7355c5490fc600 参考资料(半正定矩阵的定义):https://baike.baidu.com/item/%E5%8D%8A%E6%AD%A3%E5%AE%9A%E7%9F%A9%E9%98%B5/2152711?frge_ala 看看半正定矩阵的…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-21-处理鼠标拖拽-番外篇

1.简介 前边宏哥拖拽有提到那个反爬虫机制,加了各种参数,以及加载js脚本文件还是有问题,偶尔宏哥好像发现了解决问题的办法,看到了黎明的曙光,宏哥就说试一下看看行不行,万一实现了。结果宏哥试了结果真的…

从零开始学习Netty - 学习笔记 - NIO基础 - 网络编程: Selector

4.网络编程 4.1.非阻塞 VS 阻塞 在网络编程中,**阻塞(Blocking)和非阻塞(Non-blocking)**是两种不同的编程模型,描述了程序在进行网络通信时的行为方式。 阻塞(Blocking)&#xff1…

Kubernetes 卷存储 NFS | nfs搭建配置 原理介绍 nfs作为存储卷使用

1、NFS介绍 NFS(Network File System)是一种分布式文件系统协议,允许客户端远程访问服务器上的文件,实现数据共享。它整合多个存储设备为统一文件系统,方便数据存储和管理,支持负载均衡和故障转移&#xf…

《咸鱼之王》简单拆解图(持续更新)

文章目录 一、 介绍二、 角色设定阿咸咸将 三、游戏拆解 一、 介绍 《咸鱼之王》是一款由阿咸工作室开发的手机游戏,战斗方式为回合制卡牌对战,同时玩家点击屏幕可以为阵容提供助攻。该游戏于2021年3月4日公测。 在游戏中,玩家将化身主角阿…

测试环境搭建整套大数据系统(四:ubuntu22.4创建普通用户)

一:创建用户,修改密码,增加sudo权限。 useradd dolphinscheduler #输入密码 passwd dolphinscheduler # 配置 sudo 免密 sed -i $adolphinscheduler ALL(ALL) NOPASSWD: NOPASSWD: ALL /etc/sudoers sed -i s/Defaults requirett/#Defa…