Java 零基础教程

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)); // 输出: false

1.2 equalsIgnoreCase() 方法

equalsIgnoreCase() 方法与 equals() 类似,但它会忽略大小写差异

String str1 = "Hello";
String str3 = "hello";
System.out.println(str1.equalsIgnoreCase(str3)); // 输出: true

1.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)); // 输出: 0

2. 字符串修改

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));    // 输出: is

2.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 Java

2.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 123

2.5 大小写转换与修整

  • toLowerCase():转为小写。
  • toUpperCase():转为大写。
  • trim():去除字符串首尾的空白字符。
String str = "   Hello World   ";
System.out.println(str.toLowerCase()); // 输出: hello world
System.out.println(str.trim());        // 输出: Hello World

3. 字符串搜索

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"));   // 输出: 6

3.2 lastIndexOf() 方法

返回指定字符或子字符串最后一次出现的索引。

String str = "Hello World Hello";
System.out.println(str.lastIndexOf("Hello")); // 输出: 12

3.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"));     // true

4. 其他常用方法

方法说明示例
length()返回字符串中的字符数。"Hi".length() -> 2
isEmpty()检查长度是否为 0。"".isEmpty() -> true
charAt(int i)返回指定索引处的字符。"Java".charAt(0) -> 'J'