【JavaSE】Java基础语法(十一):String、StringBuilder详解

news2024/12/23 17:16:00

文章目录

  • 🍸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相互转换


在这里插入图片描述


🍸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/571000.html

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

相关文章

GitHub上标星75k+超牛的《Java面试突击离线版》够你润进去了

前言 不论是校招还是社招都避免不了各种面试。笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的,我这个有章可循‘说的意思只是说应对技术面试是可以提前准备。 运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉…

C# 栈(Stack)

目录 一、概述 二、基本的用法 1.入栈 2.出栈 Pop 方法 Peek 方法 3.判断元素是否存在 4.获取 Stack 的长度 5.遍历 Stack 6.清空容器 7.Stack 泛型类 三、结束 一、概述 栈表示对象的简单后进先出 (LIFO) 非泛型集合。 Stack 和 List 一样是一种储存容器&#x…

这种新的Facebook Messenger群发方式,让你的信息更有价值!

随着社交媒体的迅速发展,Facebook已成为人们分享信息、建立联系和开展业务的重要平台之一。在这个数字时代,如何有效地传达信息并与目标受众建立联系成为了关键的挑战。 而最近引入的Facebook Messenger群发方式为我们提供了一种全新的机会,…

【CloudCompare教程】008:基于点云的三维模型重建(泊松重建)

本文讲述基于点云的三维模型重建方法,PoissonRecon是“Poisson Surface Reconstruction”的缩写,它是由约翰霍普金斯大学的Misha Kazhdan47提出的三角形网格生成算法的简单接口。 文章目录 一、加载点云二、计算法向量三、泊松建模四、利用输出密度一、加载点云 加载兔子点云…

接口测试神器:ApiKit

想给大家分享一款技术人必备的接口测试神器:ApiKit,应该是我目前用过,算得上良心的接口工具 背景 作为互联网行业技术从业者,接口调试是必不可少的一项技能,通常我们都会选择使用 Postman 这类工具来进行接口调试&…

Kali-linux使用Aircrack-ng工具破解无线网络

Aircrack-ng是一款基于破解无线802.11协议的WEP及WPA-PSK加密的工具。该工具主要用了两种攻击方式进行WEP破解。一种是FMS攻击,该攻击方式是以发现该WEP漏洞的研究人员名字(Scott Fluhrer、Itsik Mantin及Adi Shamir)所命名;另一种…

播放量上百亿,易车新媒体矩阵到底做对了什么

消费者的媒介触点和整体决策链路在不断向线上偏移,有数据显示,超7成的车主对信息的获取渠道偏好为汽车垂直媒体。 在这个大背景下,谁能打造更专业的内容,能更快速且广泛地触达用户,谁才更有可能脱颖而出,汽…

如何快速搭建SpringBoot+Vue前后端分离的开发环境

唠嗑部分 今天我们来说一说,如何快速搭建SpringBootVue前后端分离的开发环境 需要前置环境nodejs,请自行安装(傻瓜式安装) SpringBoot采用2.4.2版本,Vue采用Vue2版本 言归正传 创建Vue项目 1、安装vue npm install -g vue/cli2、检查v…

【2023 · CANN训练营第一季】MindSpore模型快速调优攻略 第一章——调试调优背景介绍

1.模型迁移、模型调试调优背景介绍 模型训练\推理过程中可能遇到的问题: • 代码编写错误,问题难以定位; • 模型结构错误; • 权重更新错误; • 损失函数设计错误; • 半精度下计算溢出; • L…

上线11年公众号广告大变天!最新政策解读|西瓜数据

昨晚,微信公众平台的一则公告,在圈内炸开锅了。 ▲ 图片来源:西瓜数据社群截图 公告称: 公众号运营者与第三方商业合作形式推销商品或者服务,如附加购物链接等购买方式的商业合作营销内容,在2023年6月30日…

迅为RK3568开发板Android 双屏/三屏同显

iTOP-RK3568 开发板支持以下屏幕 迅为 LVDS 7 寸屏幕 迅为 LVDS 10.1 寸 1024*600 屏幕 迅为 LVDS 10.1 寸 1280*800 屏幕 迅为 MIPI 7 寸屏幕 HDMI 屏幕(通过 HDMI 线连接) HDMI 屏幕(通过 VGA 线连接) 然后修改 Android1…

Linux系统提权

滥用的SUDO提权 执行流程:当前用户转换到root,然后以root身份执行命令,执行完成后,直接退回到当前用户 注意:执行sudo时输入的命令,是当前用户的密码,而非root密码 sudo配置文件:…

SpringBoot枚举入参实战

文章目录 前言一、什么是枚举?二、枚举的优点三、枚举的缺点四、使用步骤1.代码实现1.1.枚举1.2.实体1.3.控制层 2.Postman测试2.1.Get请求2.1.1.枚举参数2.1.2.对象枚举属性参数 2.2.Post请求2.2.1.枚举参数2.2.2.对象枚举属性参数 2.3.Put请求2.3.1.枚举参数2.3.2…

0基础学习VR全景平台篇第31章:场景功能-嵌入图片

大家好,欢迎收看蛙色平台免费教程! 功能位置示意 一、本功能将用在哪里? 嵌入功能可对VR全景作品嵌入【图片】【视频】【文字】【标尺】四种不同类型内容,本次主要带来图片类型的介绍,满足场景营销、重点标注、幻灯片…

node.js+vue.js大学生在线选课系统的设计与实现93pul

本次设计任务是要设计一个选课系统的设计与实现,通过这个系统能够满足用户对选课信息的需求。系统的主要功能包括:个人中心、学生管理、教师管理、选课信息管理等功能。 管理员可以根据系统给定的账号进行登录,登录后可以进入选课系统的设计与…

操作系统第四章——文件管理(下)

竹本无心,却节外生枝,藕却有孔,但出淤泥而不染,人生如梦,却却不随人愿,万般皆是命,半点不由人 文章目录 4.1.5 逻辑结构VS物理结构4.1.6 文件的基本操作知识总览创建文件删除文件打开文件关闭文…

超融合产品集成 Kata 虚拟化容器技术的方案演进 | 龙蜥技术

编者按:超融合技术融合基础实施为企业用户提供虚拟化、容器等不同形态的服务。今天,浪潮数据超融合云原生工程师王永超带大家了解 Kata 虚拟化容器技术,及超融合产品为集成 Kata 容器而进行技术方案演进历程,也分享了超融合 Kata …

Pinctrl/Gpio简介(以应用层角度修改设备树)

1.先举个例子 1 、添加 pinctrl 节点 iomuxc 节点就是 I.MX6ULL 的 IOMUXC 外设对应的节点 imx6ull.dtsi iomuxc: iomuxc020e0000 {compatible "fsl,imx6ul-iomuxc";reg <0x020e0000 0x4000>; }imx6ull.dts 根节点下 gpioled {#address-cells <1>;…

深入业务场景的数据使用安全管控实践

《数据安全法》第三条对数据安全给出了明确的定义&#xff1a;“数据处理包括数据的收集、存储、使用、加工、传输、提供、公开等。数据安全是指通过采取必要措施&#xff0c;确保数据处于有效保护和合法利用的状态&#xff0c;以及具备保障持续安全状态的能力。” 数据随着业…

Python 学到什么程度才可以去找工作?掌握这 4 点足够了!

大家在学习Python的时候&#xff0c;有人会问“Python要学到什么程度才能出去找工作”&#xff0c;对于在Python培训机构学习Python的同学来说这都不是问题&#xff0c;因为按照Python课程大纲来&#xff0c;一般都不会有什么问题&#xff0c;而对于自学Python来说&#xff0c;…