Java 字符串操作
字符串处理是编程中的一项基本技能,在 Java 中尤其如此。字符串用于表示文本,这是许多应用程序中最常见的数据类型。有效操作字符串的能力让你能够处理、格式化和分析文本数据。
本章将介绍 Java 中提供的各种字符串操作方法,为你提供高效处理字符串所需的工具。我们将探索用于比较、修改、提取和搜索字符串的方法。
1. 字符串比较
比较字符串是编程中的常见任务。Java 提供了几种比较方法,每种方法都有其细微差别。
1.1 equals() 方法
equals() 方法比较两个字符串的内容。如果字符串完全相同(逐个字符匹配),则返回 true,否则返回 false。该方法对大小写敏感。
String str1 = "Hello";
String str2 = "Hello";
String str3 = "hello";
System.out.println(str1.equals(str2)); // 输出: true
System.out.println(str1.equals(str3)); // 输出: false1.2 equalsIgnoreCase() 方法
equalsIgnoreCase() 方法与 equals() 类似,但它会忽略大小写差异。
String str1 = "Hello";
String str3 = "hello";
System.out.println(str1.equalsIgnoreCase(str3)); // 输出: true1.3 compareTo() 方法
compareTo() 方法按字典顺序(基于 Unicode 值)比较两个字符串。它返回:
- 负数:如果第一个字符串在字典中排在第二个字符串之前。
- 零:如果两个字符串相等。
- 正数:如果第一个字符串在字典中排在第二个字符串之后。
String str1 = "apple";
String str2 = "banana";
String str3 = "apple";
System.out.println(str1.compareTo(str2)); // 输出: 负值
System.out.println(str1.compareTo(str3)); // 输出: 0
System.out.println(str2.compareTo(str1)); // 输出: 正值1.4 compareToIgnoreCase() 方法
与 compareTo() 类似,但执行字典比较时会忽略大小写。
String str1 = "Apple";
String str2 = "apple";
System.out.println(str1.compareToIgnoreCase(str2)); // 输出: 02. 字符串修改
Java 提供了一些修改字符串的方法。由于字符串是不可变的 (Immutable),这些方法不会改变原始字符串,而是返回一个包含修改内容的新字符串。
2.1 concat() 方法
concat() 方法将两个字符串连接在一起。
String str1 = "Hello";
String str2 = " World";
String result = str1.concat(str2);
System.out.println(result); // 输出: Hello World
System.out.println(str1); // 输出: Hello (str1 保持不变)提示: 通常更推荐使用 + 运算符进行连接,因为它更简洁易读。
2.2 substring() 方法
substring() 方法提取字符串的一部分。它有两种重载形式:
substring(int beginIndex):从指定索引开始截取到末尾。substring(int beginIndex, int endIndex):从beginIndex开始截取到endIndex(不包括endIndex处的字符)。
String str = "This is a string";
System.out.println(str.substring(5)); // 输出: is a string
System.out.println(str.substring(5, 7)); // 输出: is2.3 replace() 方法
replace() 方法将指定的字符或子字符串替换为另一个字符或子字符串。
replace(char oldChar, char newChar):替换所有指定的字符。replace(CharSequence target, CharSequence replacement):替换所有指定的字符串。
String str = "Hello World";
System.out.println(str.replace('l', 'p')); // 输出: Heppo Worpd
System.out.println(str.replace("World", "Java")); // 输出: Hello Java2.4 replaceAll() 和 replaceFirst()
这些方法使用正则表达式进行匹配,功能比 replace() 更强大。
replaceAll():替换所有匹配项。replaceFirst():仅替换第一个匹配项。
String str = "Hello 123 World 123";
// 将所有数字替换为 ###
System.out.println(str.replaceAll("\\d+", "###")); // 输出: Hello ### World ###
// 仅替换第一组数字
System.out.println(str.replaceFirst("\\d+", "###")); // 输出: Hello ### World 1232.5 大小写转换与修整
toLowerCase():转为小写。toUpperCase():转为大写。trim():去除字符串首尾的空白字符。
String str = " Hello World ";
System.out.println(str.toLowerCase()); // 输出: hello world
System.out.println(str.trim()); // 输出: Hello World3. 字符串搜索
Java 提供了多种在字符串中查找内容的方法。
3.1 indexOf() 方法
返回指定字符或子字符串第一次出现的索引。如果未找到,返回 -1。
String str = "Hello World";
System.out.println(str.indexOf('o')); // 输出: 4
System.out.println(str.indexOf('o', 5)); // 输出: 7 (从索引 5 开始找)
System.out.println(str.indexOf("World")); // 输出: 63.2 lastIndexOf() 方法
返回指定字符或子字符串最后一次出现的索引。
String str = "Hello World Hello";
System.out.println(str.lastIndexOf("Hello")); // 输出: 123.3 检查开头、结尾与包含
startsWith(String prefix):是否以指定前缀开头。endsWith(String suffix):是否以指定后缀结尾。contains(CharSequence s):是否包含指定的字符序列。
String str = "Hello World";
System.out.println(str.startsWith("Hello")); // true
System.out.println(str.endsWith("Java")); // false
System.out.println(str.contains("orl")); // true4. 其他常用方法
| 方法 | 说明 | 示例 |
|---|---|---|
| length() | 返回字符串中的字符数。 | "Hi".length() -> 2 |
| isEmpty() | 检查长度是否为 0。 | "".isEmpty() -> true |
| charAt(int i) | 返回指定索引处的字符。 | "Java".charAt(0) -> 'J' |