Java基础&API(2) String、StringBuilder详解

简介: Java基础&API(2) 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);

相关文章
|
25天前
|
存储 JavaScript Java
Java 中的 String Pool 简介
本文介绍了 Java 中 String 对象及其存储机制 String Pool 的基本概念,包括字符串引用、构造方法中的内存分配、字符串文字与对象的区别、手工引用、垃圾清理、性能优化,以及 Java 9 中的压缩字符串特性。文章详细解析了 String 对象的初始化、内存使用及优化方法,帮助开发者更好地理解和使用 Java 中的字符串。
Java 中的 String Pool 简介
|
12天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
1月前
|
缓存 安全 Java
java 为什么 String 在 java 中是不可变的?
本文探讨了Java中String为何设计为不可变类型,从字符串池的高效利用、哈希码缓存、支持其他对象的安全使用、增强安全性以及线程安全等方面阐述了不可变性的优势。文中还通过具体代码示例解释了这些优点的实际应用。
java 为什么 String 在 java 中是不可变的?
|
2月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
118 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
27天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
57 10
|
25天前
|
存储 Java
Java 11 的String是如何优化存储的?
本文介绍了Java中字符串存储优化的原理和实现。通过判断字符串是否全为拉丁字符,使用`byte`代替`char`存储,以节省空间。具体实现涉及`compress`和`toBytes`方法,前者用于尝试压缩字符串,后者则按常规方式存储。代码示例展示了如何根据配置决定使用哪种存储方式。
|
1月前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
57 6
|
1月前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
2月前
|
Java
在Java中如何将基本数据类型转换为String
在Java中,可使用多种方法将基本数据类型(如int、char等)转换为String:1. 使用String.valueOf()方法;2. 利用+运算符与空字符串连接;3. 对于数字类型,也可使用Integer.toString()等特定类型的方法。这些方法简单高效,适用于不同场景。
63 7
|
2月前
|
开发框架 Java 关系型数据库
Java哪个框架适合开发API接口?
在快速发展的软件开发领域,API接口连接了不同的系统和服务。Java作为成熟的编程语言,其生态系统中出现了许多API开发框架。Magic-API因其独特优势和强大功能,成为Java开发者优选的API开发框架。本文将从核心优势、实际应用价值及未来展望等方面,深入探讨Magic-API为何值得选择。
69 2