精通 Java 字符串:创建、方法与最佳实践
Java 字符串
本教程通过示例讲解 Java 字符串、如何创建以及 String 类的各种方法。
Java 中字符串是字符序列。例如,"hello" 是包含字符 'h'、'e'、'l'、'l'、'o' 的字符串。
Java 用 双引号 表示字符串。例如:
// 创建字符串
String type = "Java programming";
此处创建名为 type 的字符串变量,初始化为 Java Programming。
示例:在 Java 中创建字符串
class Main {
public static void main(String[] args) {
// 创建字符串
String first = "Java";
String second = "Python";
String third = "JavaScript";
// 打印字符串
System.out.println(first); // 打印 Java
System.out.println(second); // 打印 Python
System.out.println(third); // 打印 JavaScript
}
}
上例创建三个字符串 first、second、third。此处像基本类型一样直接创建字符串。
但还有另一种创建 Java 字符串的方式 (使用 new 关键字)。稍后讲解。
注意:Java 中字符串不是基本类型 (如 int、char 等)。所有字符串都是预定义类 String 的对象。
所有字符串变量都是 String 类的实例。
Java 字符串操作
Java String 提供各种方法执行字符串操作。我们看一些常用操作。
1. 获取字符串长度
获取字符串长度用 String 的 length() 方法。例如:
class Main {
public static void main(String[] args) {
// 创建字符串
String greet = "Hello! World";
System.out.println("String: " + greet);
// 获取 greet 长度
int length = greet.length();
System.out.println("Length: " + length);
}
}
输出
String: Hello! World Length: 12
上例中 length() 计算字符串总字符数并返回。详见 Java String length()。
2. 连接两个 Java 字符串
Java 中可用 concat() 方法连接两个字符串。例如:
class Main {
public static void main(String[] args) {
// 创建第一个字符串
String first = "Java ";
System.out.println("First String: " + first);
// 创建第二个字符串
String second = "Programming";
System.out.println("Second String: " + second);
// 连接两个字符串
String joinedString = first.concat(second);
System.out.println("Joined String: " + joinedString);
}
}
输出
First String: Java Second String: Programming Joined String: Java Programming
上例创建 first 和 second 两个字符串。注意语句:
String joinedString = first.concat(second);
此处 concat() 将 second 连接到 first 并赋给 joinedString。
也可用 + 运算符连接字符串。详见 Java String concat()。
3. 比较两个字符串
Java 中可用 equals() 方法比较两个字符串。例如:
class Main {
public static void main(String[] args) {
// 创建 3 个字符串
String first = "java programming";
String second = "java programming";
String third = "python programming";
// 比较 first 和 second
boolean result1 = first.equals(second);
System.out.println("Strings first and second are equal: " + result1);
// 比较 first 和 third
boolean result2 = first.equals(third);
System.out.println("Strings first and third are equal: " + result2);
}
}
输出
Strings first and second are equal: true Strings first and third are equal: false
上例创建 first、second、third 三个字符串。使用 equals() 检查字符串是否相等。
equals() 比较时检查字符串内容。详见 Java String equals()。
注意:也可用 == 运算符比较字符串。但这与 equals() 方法不同。详见 Java String == vs equals()。
Java 字符串中的转义字符
转义字符用于转义字符串内的某些字符。
假设需要在字符串中包含双引号。
// 包含双引号
String example = "This is the "String" class";
因字符串用 双引号 表示,编译器会将 "This is the " 视为字符串。上述代码会报错。
解决方法:在 Java 中使用转义字符 \。例如:
// 使用转义字符
String example = "This is the \"String\" class.";
转义字符告诉编译器转义 双引号 并读取整个文本。
Java 字符串不可变
Java 中字符串 不可变。即一旦创建字符串,无法改变该字符串。
深入理解请看示例:
// 创建字符串
String example = "Hello! ";
此处创建字符串变量 example,持有字符串 "Hello! "。
假设想修改字符串。
// 添加另一个字符串 "World"
// 到前一个字符串
example = example.concat(" World");
此处用 concat() 将另一个字符串 World 加到前一个字符串。
看似改变了前一个字符串的值。但这 true。
看看实际发生了什么:
- JVM 取第一个字符串 "Hello! "
- 创建新字符串,将 "World" 加到第一个字符串
- 将新字符串 "Hello! World" 赋给 example 变量
- 第一个字符串 "Hello! " 保持不变
使用 new 关键字创建字符串
目前我们像基本类型一样创建字符串。
因 Java 字符串是对象,也可用 new 关键字创建。例如:
// 使用 new 关键字创建字符串
String name = new String("Java String");
上例用 new 关键字创建字符串 name。
创建字符串对象时,调用 String() 构造器。详见 Java 构造器。
注意:String 类提供其他各种构造器创建字符串。详见 Java String (官方 Java 文档)。
示例:使用 new 关键字创建 Java 字符串
class Main {
public static void main(String[] args) {
// 使用 new 创建字符串
String name = new String("Java String");
System.out.println(name); // 打印 Java String
}
}
字面量 vs new 关键字创建字符串
既知字面量和 new 关键字两种创建方式,看主要区别。
Java 中 JVM 维护 字符串池 在内存中存储所有字符串。字符串池助于复用字符串。
1. 使用字面量创建字符串时,
String example = "Java";
此处直接提供字符串值 (Java)。编译器先检查字符串池中是否已存在该字符串。
- 若字符串已存在,不创建新字符串。新引用 example 指向已存在的字符串 (
Java)。 - 若字符串不存在,创建新字符串 (
Java)。
2. 使用 new 关键字创建字符串时,
String example = new String("Java");
此处不直接提供字符串值。故即使内存池已有 "Java",也会创建新的 "Java" 字符串。
Java String 方法
除上述方法外,Java 还有各种字符串方法。以下列出部分方法:
| 方法 | 描述 |
|---|---|
| contains() | 检查字符串是否包含子串 |
| substring() | 返回字符串的子串 |
| join() | 用分隔符连接给定字符串 |
| replace() | 用指定新字符替换指定旧字符 |
| replaceAll() | 替换所有匹配正则模式的子串 |
| replaceFirst() | 替换首个匹配子串 |
| charAt() | 返回指定位置的字符 |
| getBytes() | 将字符串转为字节数组 |
| indexOf() | 返回字符串中指定字符的位置 |
| compareTo() | 按字典序比较两个字符串 |
| compareToIgnoreCase() | 忽略大小写按字典序比较 |
| trim() | 移除首尾空白字符 |
| format() | 返回格式化字符串 |
| split() | 将字符串拆分为字符串数组 |
| toLowerCase() | 转为小写 |
| toUpperCase() | 转为大写 |
| valueOf() | 返回指定参数的字符串表示 |
| toCharArray() | 转为 char 数组 |
| matches() | 检查字符串是否匹配给定正则 |
| startsWith() | 检查字符串是否以给定字符串开头 |
| endsWith() | 检查字符串是否以给定字符串结尾 |
| isEmpty() | 检查字符串是否为空 |
| intern() | 返回字符串的规范表示 |
| contentEquals() | 检查字符串是否等于 charSequence |
| hashCode() | 返回字符串的哈希码 |
| subSequence() | 从字符串返回子序列 |
java
- 掌握 C# 字符串:基础、操作与进阶技巧完全指南
- 精通 Java 运算符:类型、语法与实战示例
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java 枚举字符串表示:默认行为、toString 重写与进阶模式
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java String.charAt() 详解:语法、返回类型、异常与实战示例
- 精通 Java String.endsWith():检查字符串后缀(示例)
- Java 字符串替换大全:replace()、replaceAll() 与 replaceFirst() 详解
- Java String toLowerCase() 与 toUpperCase():区域感知的大小写转换
- Java 中 char 与 String 相互转换:实用示例与最佳实践
- Java 递归反转字符串:原理、代码实现与性能分析