Java基础API(2) 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相互转换


在这里插入图片描述


这篇文章继续探讨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);



在这里插入图片描述

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

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

相关文章

【云原生】Docker 安全与CA证书生成

目录 容器的安全行问题 Docker 容器与虚拟机的区别 Docker 存在的安全问题 1.Docker 自身漏洞 2.Docker 源码问题 Docker 架构缺陷与安全机制 1. 容器之间的局域网攻击 2. DDoS 攻击耗尽资源 3. 有漏洞的系统调用 4. 共享root用户权限 Docker 安全基线标准 1. 内…

BOSS直聘招聘经验

招聘低端兼职岗位。流量很大,来的人通常实力也不足。 招聘高端兼职岗位。流量不多。来的人通常具备一定实力。 招聘高薪职位,流量一般,会有有实力的勾搭。 招聘低薪职位,流量一般。通常没什么实力。

【算法与数据结构】200、695、LeetCode岛屿数量(深搜+广搜) 岛屿的最大面积

文章目录 一、200、岛屿数量1.1 深度优先搜索DFS1.2 广度优先搜索BFS 二、695、岛屿的最大面积2.1 深度优先搜索DFS2.2 广度优先搜索BFS 三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、200、岛屿数量 1.1 深度优先搜…

第三百五十八回

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 013pickers2.gif 我们在上一章回中介绍了"如何实现Numberpicker"相关的内容,本章回中将介绍wheelChoose组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念…

ChatGPT丨成像光谱遥感技术中的AI革命:ChatGPT应用指南

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用,人工智…

解决弹性布局父元素设置高自动换行,子元素均分高度问题(align-content: flex-start)

案例&#xff1a; <view class"abc"><view class"abc-item" v-for"(item,index) in 8" :key"index">看我</view> </view> <style lang"less">.abc{height: 100px;display: flex;flex-wrap: …

[ Python+OpenCV+Mediapipe ] 实现对象识别

一、写在前面 本文所用例子为个人学习的小结&#xff0c;如有不足之处请各位多多海涵&#xff0c;欢迎小伙伴一起学习进步&#xff0c;如果想法可在评论区指出&#xff0c;我会尽快回复您&#xff0c;不胜感激&#xff01; 所公布代码或截图均为运行成功后展示。 二、本文内容…

【设计模式】使用适配器模式做补偿设计

文章目录 1.概述2.两种适配器模式2.1.类适配器2.2.对象适配器 3.总结 1.概述 适配器模式是一种结构型设计模式&#xff0c;它提供了一个中间层&#xff0c;通过这个中间层&#xff0c;客户端可以使用统一的接口与具有不同接口的类进行交互&#xff0c;也就是说&#xff0c;将一…

Sora横空出世!AI将如何撬动未来?

近日&#xff0c;OpenAI 发布首个视频生成“Sora”模型&#xff0c;该模型通过接收文字指令&#xff0c;即可生成60秒的短视频。 而在2022年末&#xff0c;同样是OpenAI发布的AI语言模型ChatGPT&#xff0c;简化了文本撰写、创意构思以及代码校验等任务。用户仅需输入一个指令&…

1.30数据包络法

数据包络分析法&#xff08;Data Envelopment Analysis&#xff0c;DEA&#xff09;是一种非参数的效率评价方法&#xff0c;用于衡量相对效率和评估多个决策单元&#xff08;DMU&#xff09;的绩效。 在数据包络分析中&#xff0c;每个决策单元都是一个输入和输出数据向量的组…

[Angular 基础] - service 服务

[Angular 基础] - service 服务 之前的笔记就列举三个好了……没想到 Angular 东西这么多(&#xff70; &#xff70;;)……全加感觉越来越凑字数了 [Angular 基础] - 视图封装 & 局部引用 & 父子组件中内容传递 [Angular 基础] - 生命周期函数 [Angular 基础] - 自…

Android T 远程动画显示流程其二——动画的添加流程(更新中)

前言 接着上篇文章分析 Android T 远程动画显示流程其一 切入点——处理应用的显示过渡 下面&#xff0c;我们以从桌面点击一个应用启动的场景来分析远程动画的流程&#xff0c;窗口添加的流程见Android T WMS窗口相关流程 这里我们从AppTransitionController.handleAppTran…

量子加密机的工作原理是什么

量子加密机&#xff0c;作为现代加密技术的一大飞跃&#xff0c;正逐渐成为信息安全领域的研究热点。与传统的加密方法相比&#xff0c;量子加密技术以其独特的优势&#xff0c;为信息安全提供了更为坚实的保障。 量子加密的核心在于利用量子力学的特性&#xff0c;尤其是量子纠…

sizeof()的易错点

你也可以传入一个变量的名字&#xff08;而不只是类型&#xff09;给 sizeof()&#xff0c;但在一些情况下&#xff0c;可能得不到你要的结果&#xff0c;所以要小心使用。例如&#xff0c;看看下面的代码片段&#xff1a; 在第一行&#xff0c;我们为 10 个整数的数组声明了空…

LInux-信号1

文章目录 前言一、信号是什么&#xff1f;二、学习步骤使用kill -l命令查看信号列表可以看到有那么多信号&#xff0c;那么进程是如何识别这么多信号的呢&#xff1f; 使用kill命令终止进程信号的捕捉kill函数raise函数abort函数 Core dump如何查看自己的核心转储功能是否被打开…

C++运算符重载、迭代器、继承、派生类的构造与析构、重载、隐藏和覆盖

运算符重载 普通的C运算符重载成员方法基本都知道&#xff0c;如果没有定义成员方法&#xff0c;那么编译器会优先寻找全局重载运算符看看是否匹配。这里给出了一个使用友元函数和全局重载运算符来实现整数与复数类对象的相加运算。 #include <iostream>class Complex …

Flink双流(join)

一、介绍 Join大体分类只有两种&#xff1a;Window Join和Interval Join Window Join有可以根据Window的类型细分出3种&#xff1a;Tumbling(滚动) Window Join、Sliding(滑动) Window Join、Session(会话) Widnow Join。 &#x1f338;Window 类型的join都是利用window的机制…

蜂鸣器实验

1.有源蜂鸣器简介 蜂鸣器常用于计算机、打印机、报警器、电子玩具等电子产品中&#xff0c;常用的蜂鸣器有两种&#xff1a; 有源蜂鸣器和无源蜂鸣器&#xff0c;这里的有“源”不是电源&#xff0c;而是震荡源&#xff0c;有源蜂鸣器内部带有震荡 源&#xff0c;所以有源蜂…

OD(8)之Mermaid流程图(flowcharts)使用详解

OD(8)之Mermaid流程图(flowcharts)使用详解 Author: Once Day Date: 2024年2月20日 漫漫长路才刚刚开始… 全系列文章可参考专栏: Linux实践记录_Once_day的博客-CSDN博客 参考文章: 关于 Mermaid | Mermaid 中文网 (nodejs.cn)Mermaid | Diagramming and charting tool‍…

Maven 私服 Nexus3

一、Maven和Nexus3 简介 Maven是一个采用纯Java编写的开源项目管理工具&#xff0c;采用一种被称之为Project Object Model(POM)概念来管理项目&#xff0c;所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期&#xff0c;包括…