Java 常用 API(String & StringBuilder)超详细整理,从入门到精通
API 全称是应用程序编程接口,简单理解就是 Java 官方提前封装好的类与方法,开发者可直接调用实现功能。本章重点讲解开发使用频率最高的String字符串类与StringBuilder字符串缓冲区,包含底层特点、构造方法、全套成员方法、经典案例与内存分析,语法 + 实战结合,适合零基础学习、面试复习。
一、API 概述
API 就是 Java 官方提供的现成类和方法,我们无需从零编写底层逻辑,直接调用即可完成业务。前期已经接触过Scanner(键盘录入)、Random(随机数),本章学习字符串两大核心类:String、StringBuilder。
二、String 类
2.1 字符串应用场景
字符串是程序中最常用的数据类型,账号密码、文本内容、弹幕、聊天信息、手机号等业务场景,都离不开字符串操作。
2.2 String 类核心特点
- Java 中所有双引号包裹的内容,都是 String 类对象;
- 字符串内容一旦创建,不可修改;
- 字符串可以被多个引用变量共享。
2.3 String 常用构造方法
| 构造方法 | 功能说明 |
|---|---|
public String() |
创建一个空白字符串,无任何字符 |
public String(String original) |
根据传入字符串,创建新字符串对象 |
public String(char[] chs) |
根据字符数组,创建字符串对象 |
代码演示:
public class StringCreate {
public static void main(String[] args) {
// 1. 空参构造
String s1 = new String();
// 2. 传入字符串构造
String s2 = new String("Java");
// 3. 字符数组转字符串
char[] arr = {'a','b','c'};
String s3 = new String(arr);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}
2.4 字符串内存与 == 判断(高频面试点)
==对于引用类型,比较的是内存地址,结合字符串常量池分四种场景讲解:
场景 1:直接赋值常量
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // 结果:true
解析:双引号常量会存入字符串常量池,池内数据共享,两个变量指向同一地址。
场景 2:new 关键字创建对象
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1 == s2); // 结果:false
解析:new会在堆内存开辟新空间,s1指向常量池,s2指向堆对象,地址不同。
场景 3:变量拼接字符串
String s1 = "abc";
String s2 = "ab";
String s3 = s2 + "c";
System.out.println(s1 == s3); // 结果:false
解析:变量拼接底层会使用StringBuilder,最终生成新堆对象,和常量池地址不一致。
场景 4:纯常量拼接
String s1 = "abc";
String s2 = "a" + "b" + "c";
System.out.println(s1 == s2); // 结果:true
解析:编译器会做常量优化,直接合并为"abc",复用常量池地址。
2.5 字符串内容比较方法
==比较地址,比较字符串内容必须使用专用方法:
public boolean equals(String str):区分大小写,完全一致才返回true;public boolean equalsIgnoreCase(String str):忽略大小写比较。
代码示例(模拟登录案例):
import java.util.Scanner;
public class LoginDemo {
public static void main(String[] args) {
// 预设正确账号密码
String userName = "admin";
String pwd = "123456";
Scanner sc = new Scanner(System.in);
int count = 3; // 登录次数
while (count > 0) {
System.out.println("请输入用户名:");
String inputUser = sc.next();
System.out.println("请输入密码:");
String inputPwd = sc.next();
if (userName.equals(inputUser) && pwd.equals(inputPwd)) {
System.out.println("登录成功!");
break;
} else {
count--;
System.out.println("账号或密码错误,剩余次数:" + count);
}
}
}
}
2.6 字符串遍历相关方法
public int length():获取字符串长度;public char charAt(int index):根据索引获取单个字符;public char[] toCharArray():将字符串转为字符数组。
实战案例:统计大写、小写、数字字符数量
import java.util.Scanner;
public class CountChar {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = sc.next();
int upper = 0; // 大写
int lower = 0; // 小写
int number = 0; // 数字
char[] chArr = str.toCharArray();
for (char ch : chArr) {
if (ch >= 'A' && ch <= 'Z') {
upper++;
} else if (ch >= 'a' && ch <= 'z') {
lower++;
} else if (ch >= '0' && ch <= '9') {
number++;
}
}
System.out.println("大写字母:" + upper);
System.out.println("小写字母:" + lower);
System.out.println("数字:" + number);
}
}
2.7 字符串截取方法
public String substring(int beginIndex):从指定索引截取到字符串末尾;public String substring(int beginIndex, int endIndex):截取指定区间,包头不包尾(包含起始索引,不包含结束索引)。
实战案例:手机号屏蔽(156****1234)
import java.util.Scanner;
public class PhoneHide {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入手机号:");
String phone = sc.next();
// 截取前3位 + 拼接**** + 截取后4位
String start = phone.substring(0,3);
String end = phone.substring(7);
String result = start + "****" + end;
System.out.println("屏蔽后:" + result);
}
}
2.8 字符串替换方法
方法:public String replace(旧字符串, 新字符串)作用:替换字符串内容,原字符串不变,返回新字符串。
实战案例:敏感词过滤
import java.util.Scanner;
public class ReplaceDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入聊天内容:");
String content = sc.nextLine();
// 替换敏感词 TMD 为 ***
String newContent = content.replace("TMD", "***");
System.out.println("过滤后:" + newContent);
}
}
2.9 字符串切割方法
方法:public String[] split(String regex)作用:按照指定规则切割字符串,结果存入字符串数组。
2.10 String 常用方法汇总
| 方法 | 功能 |
|---|---|
equals() |
区分大小写比较内容 |
equalsIgnoreCase() |
忽略大小写比较内容 |
length() |
获取字符串长度 |
charAt() |
根据索引取字符 |
toCharArray() |
字符串转字符数组 |
substring() |
截取字符串 |
replace() |
字符串替换 |
split() |
字符串切割 |
小结
- String 字符串内容不可变,所有修改操作都会生成新字符串;
- 常量池共享地址,
new对象、变量拼接都会产生新地址; - 比较内容优先使用
equals,禁止直接用==; - 掌握截取、替换、遍历、切割四大常用方法,应对业务开发。
三、StringBuilder 类
3.1 为什么需要 StringBuilder
String内容不可变,频繁拼接字符串会不断产生新对象,内存占用高、执行效率低。StringBuilder是可变字符串缓冲区,字符内容可动态修改,专门用于高频字符串拼接场景,性能远优于String。
3.2 StringBuilder 构造方法
| 构造方法 | 功能说明 |
|---|---|
public StringBuilder() |
创建空字符串缓冲区 |
public StringBuilder(String str) |
传入字符串,初始化缓冲区内容 |
3.3 核心常用方法
| 方法 | 功能说明 |
|---|---|
append(任意类型) |
追加数据,返回自身对象(拼接首选) |
reverse() |
反转缓冲区字符内容 |
length() |
获取字符长度 |
toString() |
转为普通String对象(互转核心方法) |
3.4 方法基础演示
public class StringBuilderBase {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
// 拼接内容
sb.append("Java").append(123).append(true);
System.out.println("拼接后:" + sb);
// 反转
sb.reverse();
System.out.println("反转后:" + sb);
// 转为String
String str = sb.toString();
System.out.println("转为字符串:" + str);
}
}
3.5 案例 1:判断回文字符串
需求:键盘录入字符串,判断是否为对称回文(如123321、abcba)
import java.util.Scanner;
public class Palindrome {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = sc.next();
// 借助StringBuilder反转对比
StringBuilder sb = new StringBuilder(str);
String reverseStr = sb.reverse().toString();
if (str.equals(reverseStr)) {
System.out.println("是回文字符串");
} else {
System.out.println("不是回文字符串");
}
}
}
3.6 案例 2:数组转指定格式字符串
需求:将int[] arr = {1,2,3} 拼接为 [1, 2, 3] 格式
public class ArrayJoin {
public static void main(String[] args) {
int[] arr = {1,2,3};
String result = arrayToString(arr);
System.out.println(result);
}
public static String arrayToString(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
sb.append(arr[i]);
} else {
sb.append(arr[i]).append(", ");
}
}
sb.append("]");
return sb.toString();
}
}
3.7 String 与 StringBuilder 拼接内存原理
- String 拼接:每一次
+拼接,都会在堆中创建新String对象,频繁拼接内存开销大; - StringBuilder 拼接:全程只使用一个缓冲区对象,原地修改内容,不产生额外对象,效率极高。
小结
String:内容不可变,适合少量字符串定义、内容对比;StringBuilder:内容可变,高频拼接、反转场景首选;- 两类可通过
toString()实现互相转换; - 核心方法:
append()拼接、reverse()反转、length()获取长度。
四、全文总结
java运行
- API 概念:Java 官方封装好的类与方法,直接调用即可实现功能;
- String 类
- 特性:内容不可变,常量池共享,
new/ 变量拼接产生新地址; - 核心方法:比较、遍历、截取、替换、切割,业务文本处理必备;
- 区分:
==比地址,equals比内容;
- 特性:内容不可变,常量池共享,
- StringBuilder 类
- 定位:可变字符串缓冲区,解决 String 拼接低效问题;
- 核心方法:
append拼接、reverse反转、toString转字符串;
- 选型建议:少量文本使用
String,频繁拼接、动态修改优先使用StringBuilder。
String和StringBuilder是 Java 开发、面试高频考点,建议多练习各类方法案例,吃透内存区别与使用场景。
更多推荐



所有评论(0)