创建和初始化
虽然这不是 String 的方法,但了解如何创建字符串是基础。

-
直接赋值(最常用)
- JVM 会在字符串常量池中查找,如果存在则直接引用,不存在则创建。
- 示例:
String str = "Hello, World!";
-
使用
new关键字- 每次都会在堆内存中创建一个新的
String对象,即使内容相同。 - 示例:
String str = new String("Hello, World!");
- 每次都会在堆内存中创建一个新的
获取基本信息
这些方法用于获取字符串的基本属性。
| 方法 | 描述 | 示例 |
|---|---|---|
length() |
返回字符串的长度(字符数)。 | "abc".length() 返回 3 |
isEmpty() |
如果字符串长度为 0,则返回 true,否则返回 false。 |
"".isEmpty() 返回 true |
charAt(int index) |
返回指定索引处的字符,索引从 0 开始。 | "abc".charAt(1) 返回 'b' |
codePointAt(int index) |
返回指定索引处的字符的 Unicode 码点。 | "a".codePointAt(0) 返回 97 |
查找和搜索
这些方法用于在字符串中查找子串或字符。

| 方法 | 描述 | 示例 |
|---|---|---|
contains(CharSequence s) |
判断字符串是否包含指定的字符序列。 | "Hello".contains("ell") 返回 true |
indexOf(String str) |
返回子字符串第一次出现的索引,如果找不到,返回 -1。 |
"Hello".indexOf("l") 返回 2 |
lastIndexOf(String str) |
返回子字符串最后一次出现的索引,如果找不到,返回 -1。 |
"Hello".lastIndexOf("l") 返回 3 |
startsWith(String prefix) |
判断字符串是否以指定的前缀开头。 | "Hello".startsWith("He") 返回 true |
endsWith(String suffix) |
判断字符串是否以指定的后缀结尾。 | "Hello".endsWith("lo") 返回 true |
substring(int beginIndex) |
返回从 beginIndex 开始到结尾的子字符串。 |
"Hello".substring(1) 返回 "ello" |
substring(int beginIndex, int endIndex) |
返回从 beginIndex 开始到 endIndex (不包含) 的子字符串。 |
"Hello".substring(1, 3) 返回 "el" |
比较
这些方法用于比较两个字符串的内容。
| 方法 | 描述 | 示例 |
|---|---|---|
equals(Object anObject) |
精确比较:比较两个字符串的内容是否完全相同(区分大小写)。 | "abc".equals("ABC") 返回 false |
equalsIgnoreCase(String anotherString) |
忽略大小写比较:比较两个字符串的内容是否相同(不区分大小写)。 | "abc".equalsIgnoreCase("ABC") 返回 true |
compareTo(String anotherString) |
字典序比较:按字典顺序比较两个字符串,返回一个整数值: - 0:相等- < 0:当前字符串小于参数字符串- > 0:当前字符串大于参数字符串 |
"apple".compareTo("banana") 返回负数 |
compareToIgnoreCase(String str) |
忽略大小写的字典序比较。 | "Apple".compareToIgnoreCase("apple") 返回 0 |
修改和转换
这些方法用于创建修改后的新字符串(String 对象是不可变的,这些方法都会返回新的对象)。
| 方法 | 描述 | 示例 |
|---|---|---|
concat(String str) |
将指定的字符串连接到当前字符串的末尾。 | "Hello".concat(" World!") 返回 "Hello World!" |
toUpperCase() |
将字符串中的所有字符转换为大写。 | "hello".toUpperCase() 返回 "HELLO" |
toLowerCase() |
将字符串中的所有字符转换为小写。 | "HELLO".toLowerCase() 返回 "hello" |
trim() |
去除字符串两端的空白字符(空格、制表符、换行等)。 | " hello ".trim() 返回 "hello" |
replace(char oldChar, char newChar) |
用新的字符替换所有旧的字符。 | "hello".replace('l', 'p') 返回 "heppo" |
replace(CharSequence target, CharSequence replacement) |
用新的字符序列替换所有旧的字符序列。 | "hello world".replace("world", "java") 返回 "hello java" |
replaceAll(String regex, String replacement) |
正则表达式替换:用新的字符串替换所有匹配正则表达式的子串。 | "123abc".replaceAll("\\d", "#") 返回 "###abc" |
replaceFirst(String regex, String replacement) |
正则表达式替换:用新的字符串替换第一个匹配正则表达式的子串。 | "123abc".replaceFirst("\\d", "#") 返回 "#23abc" |
split(String regex) |
正则表达式分割:根据正则表达式将字符串分割成字符串数组。 | "a,b,c".split(",") 返回 ["a", "b", "c"] |
格式化
String.format() 方法可以像 printf 一样格式化字符串,非常强大。
| 方法 | 描述 | 示例 |
|---|---|---|
static String format(String format, Object... args) |
使用指定的格式字符串和参数返回一个格式化的字符串。 | String.format("Name: %s, Age: %d, Score: %.2f", "Alice", 30, 95.6) 返回 "Name: Alice, Age: 30, Score: 95.60" |
常用格式说明符:

%s: 字符串%d: 十进制整数%f: 浮点数%.2f: 保留两位小数的浮点数%c: 字符%b: 布尔值
其他重要方法
| 方法 | 描述 | 示例 |
|---|---|---|
toCharArray() |
将字符串转换为一个新的字符数组。 | "abc".toCharArray() 返回 ['a', 'b', 'c'] |
getBytes() |
将字符串转换为字节数组(使用平台默认的字符集)。 | "你好".getBytes() |
getBytes(String charsetName) |
使用指定的字符集将字符串转换为字节数组。 | "你好".getBytes("UTF-8") |
valueOf() |
静态方法,将各种数据类型(如 int, double, Object 等)转换为字符串。 |
String.valueOf(123) 返回 "123" |
不可变性与性能提示
-
不可变性
String对象在创建后其内容是不可改变的,任何修改字符串的操作(如replace,toUpperCase,concat等)都不会改变原始字符串,而是返回一个新的String对象。- 示例:
String s1 = "hello"; String s2 = s1.toUpperCase(); // s1 仍然是 "hello",s2 是 "HELLO"
-
与
StringBuilder- 在循环中频繁使用 连接字符串会导致性能问题,因为每次 操作都会创建一个新的
String对象,产生大量不必要的内存开销。 - 推荐做法:在循环或需要大量拼接字符串的场景下,使用
StringBuilder或StringBuffer。 StringBuilder是非线程安全的,性能更高。StringBuffer是线程安全的,性能稍低。
性能对比示例:
// 不推荐:在循环中使用 + String result = ""; for (int i = 0; i < 1000; i++) { result = result + i; // 每次循环都创建新对象 } // 推荐:使用 StringBuilder StringBuilder sb = new StringBuilder(); for (int i = 0; i < 1000; i++) { sb.append(i); // 在原有对象上进行修改,效率高 } String result = sb.toString(); - 在循环中频繁使用 连接字符串会导致性能问题,因为每次 操作都会创建一个新的
| 功能类别 | 核心方法 |
|---|---|
| 获取信息 | length(), isEmpty(), charAt() |
| 查找搜索 | contains(), indexOf(), substring() |
| 比较判断 | equals(), equalsIgnoreCase(), compareTo() |
| 大小写转换 | toUpperCase(), toLowerCase() |
| 去除/替换 | trim(), replace(), replaceAll() |
| 拼接/分割 | concat(), split() |
| 格式化 | String.format() |
| 转换 | toCharArray(), valueOf() |
掌握这些常用方法是进行 Java 字符串操作的基础。String 的不可变性,并在需要时选择高效的 StringBuilder 来优化性能。
