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

文章目录

  • 🍸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);



在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

移动云镜像配置BC-Linux --配置centos 6-7-8版本参考

移动云BC linux 也是一个非常不错的镜像站. 可以加速国内下载. 非常好用, 速度比阿里 等那些流行的镜像站快一些. 下面介绍详解操作配置, 供参考 移动云开源镜像站-Linux系统订阅服务 移动云开源镜像站,包含BC-Linux各版本的软件仓库,对外提供软件升级…

sql注入学习-知识点大合集

目录 (一)sql注入了解: 1.1什么是sql注入 1.2 sql注入的分类 (二)sql注入详解: 2.1.MySQL注入 2.2.1在MySQL注入中,会用到的知识 2.2.2mysql常用语句与常见 2.2.3msyql注入内容详解 2.2…

【JavaSE】Java基础语法(十三):Java 中的集合(十分全面)

文章目录 List, Set, Queue, Map 四者的区别?集合框架底层数据结构总结ArrayList 和 Vector 的区别ArrayList 与 LinkedList 区别补充内容:RandomAccess 接⼝ArrayList 的扩容机制comparable 和 Comparator 的区别比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同…

JS逆向系列之猿人学爬虫第9题-动态cookie2

文章目录 目标参数流程分析js代码Python调用测试目标 https://match.yuanrenxue.cn/match/9参数流程分析 二次请求cookie携带m 第一次请求响应内容格式化之后是这样的: < body > < script src = "/static/match/safety/match9/udc.js" > <

Office Visio 2007安装教程

哈喽&#xff0c;大家好。今天一起学习的是Visio 2007的安装&#xff0c;这是一个绘制流程图的软件&#xff0c;用有效的绘图表达信息&#xff0c;比任何文字都更加形象和直观。Office Visio 是office软件系列中负责绘制流程图和示意图的软件&#xff0c;便于IT和商务人员就复杂…

【WebRTC】音视频通信

WebRTC对等体还需要查找并交换本地和远程音频和视频媒体信息&#xff0c;例如分辨率和编解码器功能。 交换媒体配置信息的信令通过使用被称为SDP的会话描述协议格式来交换&#xff0c;被称为提议和应答的元数据块 WebRTC 音视频通信基本流程 一方发起调用 getUserMedia 打开本…

Go网络通信

Go中HTTP协议客户端实现 Go语言标准库内置了net/http包&#xff0c;涵盖了HTTP客户端和服务端具体的实现方式。内置的net/http包提供了最简洁的HTTP客户端实现方式&#xff0c;无须借助第三方网络通信库&#xff0c;就可以直接使用HTTP中用得最多的GET和POST方式请求数据。 fun…

【Python】内置函数

文章目录 反射相关【4】基础数据类型相关【38】和数字相关&#xff08;14&#xff09;数据类型 <4>bool([x])int((x, base10)float([x])complex([real[, imag]]) 进制转换 <3>bin(x)oct(x)hex(x) 数学运算&#xff08;7&#xff09;abs(x)divmod(a, b)round(x [, n…

vue 阻止事件冒泡常用的方法

在 Vue 中&#xff0c;阻止事件冒泡有两种常用方法&#xff1a; 1. 使用 event.stopPropagation() 方法&#xff1a; 在事件处理函数中&#xff0c;可以通过调用事件对象的 stopPropagation() 方法来阻止事件冒泡。例如&#xff1a; html <template> <div click"…

00后太卷了,搞的我们这些老油条太难受了......

前几天我们公司一下子也来了几个新人&#xff0c;这些年前人是真能熬啊&#xff0c;本来我们几个老油子都是每天稍微加会班就打算走了&#xff0c;这几个新人一直不走&#xff0c;搞得我们也不好走。 2023年春招结束了&#xff0c;最近内卷严重&#xff0c;各种跳槽裁员&#x…

报表控件FastReport使用指南——使用NuGet包创建PDF文档

FastReport 是功能齐全的报表控件&#xff0c;可以帮助开发者可以快速并高效地为.NET&#xff0c;VCL&#xff0c;COM&#xff0c;ActiveX应用程序添加报表支持&#xff0c;由于其独特的编程原则&#xff0c;现在已经成为了Delphi平台最优秀的报表控件&#xff0c;支持将编程开…

多层网关已成过去,网关多合一成潮流,网关改造正当时丨Higress 正式发布 1.0 版本

作者&#xff1a;Higress 团队 01 前言 K8s 通过 Ingress / Gateway API 将网关标准化&#xff0c;逐步将安全网关、流量网关、微服务网关内聚&#xff0c;解决从单体到微服务到云原生多层网关的复杂度&#xff0c;合久必分&#xff0c;分久必合&#xff0c;多层网关已成过去…

(3)NUC980 kenerl编译

解压 用到的配置文件位置&#xff1a; /NUC980-linux-4.4.y-master/arch/arm/configs/nuc980_defconfig 执行&#xff1a; 编译linux内核源码。了解其 配置文件在 arch/arm/configs/nuc980_defconfig (1) make nuc980_defconfig 载入配置文件 (2) make menuconfig --->Devi…

SAP MM 根据采购订单反查采购申请

如何通过采购订单号查询到其前端的采购申请号。 首先从采购申请的相关报表着手&#xff0c;比如ME5A, 发现它是可以满足需求的。 例如&#xff1a;如下的采购订单&#xff0c; 该订单是由采购申请10003364转过来的。 如果想通过这个采购订单找到对应的采购申请&#xff0c;在…

Python3中goto的用法

Python3代码指定跳转可以使用goto这个库&#xff1a; 安装&#xff1a; pip install goto-statement 一般安装的版本是1.2 需要做以下修改才能正常使用&#xff1a; python 使用goto&#xff0c;遇到的问题解决_奶嘴偷走初吻的博客-CSDN博客python goto 出现报错:Attribut…

情绪管理ABC法

情绪管理ABC法 是由著名心理学家艾利斯&#xff08;Albert Ellis&#xff09;提出的一种情绪管理方法。 模型介绍 情绪&#xff0c;不取决于发生的事实&#xff0c;取决于我们如何看待这件事ABC理论认为&#xff0c;我们的情绪©&#xff0c;其实与发生的事件(A)无关&…

类的成员之:构造器(构造方法)

1.构造器的特征&#xff1a; 它具有与类相同的名称它不声明返回值类型。&#xff08;与声明为void不同&#xff09;不能被static、final、synchronized、abstract、native修饰&#xff0c;不能有return语句返回值 2.构造器的作用&#xff1a; 1.创建对象2.初始化对象的…

PID算法在流量控制中的应用

目录 增量式或位置式 目录 增量式或位置式 PID控制周期 T1 时间 T2 约4ms PID C代码 最近有小伙伴向我提问关于PID的问题&#xff1a;通过比例阀控制水流速度&#xff08;流量&#xff09;&#xff0c; 使用增量式还是位置式 PID&#xff1f;他的比例法驱动频率是500Hz…

linux环境搭建

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:介绍学习如何使用云服务器搭建Linux的环境. 前言 linux介绍…

【计算机网络中ip概念总结】【平时我们说的ip 到底是什么】【计算机网络中 ip地址是什么】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…