文章目录
- 🍸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);