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