Skip to content

13.2 字符串常用方法

字符串长度方法

length()

功能:返回字符串的长度

语法int length()

示例

java
String str = "Hello, Java!";
int length = str.length(); // 12
System.out.println("字符串长度: " + length);

字符串查找方法

charAt(int index)

功能:返回指定索引位置的字符

语法char charAt(int index)

示例

java
String str = "Hello";
char firstChar = str.charAt(0); // 'H'
char lastChar = str.charAt(str.length() - 1); // 'o'
System.out.println("第一个字符: " + firstChar);
System.out.println("最后一个字符: " + lastChar);

indexOf(int ch)

功能:返回指定字符第一次出现的索引

语法int indexOf(int ch)

示例

java
String str = "Hello, Java!";
int index = str.indexOf('o'); // 4
System.out.println("字符 'o' 的位置: " + index);

indexOf(int ch, int fromIndex)

功能:从指定索引开始,返回指定字符第一次出现的索引

语法int indexOf(int ch, int fromIndex)

示例

java
String str = "Hello, Java!";
int index = str.indexOf('o', 5); // 9
System.out.println("从索引 5 开始,字符 'o' 的位置: " + index);

indexOf(String str)

功能:返回指定字符串第一次出现的索引

语法int indexOf(String str)

示例

java
String str = "Hello, Java!";
int index = str.indexOf("Java"); // 7
System.out.println("字符串 'Java' 的位置: " + index);

indexOf(String str, int fromIndex)

功能:从指定索引开始,返回指定字符串第一次出现的索引

语法int indexOf(String str, int fromIndex)

示例

java
String str = "Hello, Java Java!";
int index = str.indexOf("Java", 8); // 12
System.out.println("从索引 8 开始,字符串 'Java' 的位置: " + index);

lastIndexOf(int ch)

功能:返回指定字符最后一次出现的索引

语法int lastIndexOf(int ch)

示例

java
String str = "Hello, Java!";
int index = str.lastIndexOf('a'); // 9
System.out.println("字符 'a' 最后出现的位置: " + index);

lastIndexOf(String str)

功能:返回指定字符串最后一次出现的索引

语法int lastIndexOf(String str)

示例

java
String str = "Hello, Java Java!";
int index = str.lastIndexOf("Java"); // 12
System.out.println("字符串 'Java' 最后出现的位置: " + index);

contains(CharSequence s)

功能:判断字符串是否包含指定的字符序列

语法boolean contains(CharSequence s)

示例

java
String str = "Hello, Java!";
boolean contains = str.contains("Java"); // true
System.out.println("是否包含 'Java': " + contains);

startsWith(String prefix)

功能:判断字符串是否以指定的前缀开始

语法boolean startsWith(String prefix)

示例

java
String str = "Hello, Java!";
boolean startsWith = str.startsWith("Hello"); // true
System.out.println("是否以 'Hello' 开始: " + startsWith);

endsWith(String suffix)

功能:判断字符串是否以指定的后缀结束

语法boolean endsWith(String suffix)

示例

java
String str = "Hello, Java!";
boolean endsWith = str.endsWith("!"); // true
System.out.println("是否以 '!' 结束: " + endsWith);

字符串截取方法

substring(int beginIndex)

功能:从指定索引开始,截取到字符串末尾

语法String substring(int beginIndex)

示例

java
String str = "Hello, Java!";
String subStr = str.substring(7); // "Java!"
System.out.println("截取结果: " + subStr);

substring(int beginIndex, int endIndex)

功能:从指定索引开始,截取到指定索引结束(不包含结束索引)

语法String substring(int beginIndex, int endIndex)

示例

java
String str = "Hello, Java!";
String subStr = str.substring(0, 5); // "Hello"
System.out.println("截取结果: " + subStr);

字符串修改方法

concat(String str)

功能:连接指定字符串到原字符串末尾

语法String concat(String str)

示例

java
String str1 = "Hello";
String str2 = " Java";
String result = str1.concat(str2); // "Hello Java"
System.out.println("连接结果: " + result);

replace(char oldChar, char newChar)

功能:替换字符串中的指定字符

语法String replace(char oldChar, char newChar)

示例

java
String str = "Hello, Java!";
String replaced = str.replace('o', 'O'); // "HellO, Java!"
System.out.println("替换结果: " + replaced);

replace(CharSequence target, CharSequence replacement)

功能:替换字符串中的指定字符序列

语法String replace(CharSequence target, CharSequence replacement)

示例

java
String str = "Hello, Java!";
String replaced = str.replace("Java", "World"); // "Hello, World!"
System.out.println("替换结果: " + replaced);

replaceAll(String regex, String replacement)

功能:使用正则表达式替换字符串中的指定内容

语法String replaceAll(String regex, String replacement)

示例

java
String str = "Hello, Java 123!";
String replaced = str.replaceAll("\\d+", "456"); // "Hello, Java 456!"
System.out.println("替换结果: " + replaced);

replaceFirst(String regex, String replacement)

功能:使用正则表达式替换字符串中第一次出现的指定内容

语法String replaceFirst(String regex, String replacement)

示例

java
String str = "Hello, Java Java!";
String replaced = str.replaceFirst("Java", "World"); // "Hello, World Java!"
System.out.println("替换结果: " + replaced);

字符串分割方法

split(String regex)

功能:根据正则表达式分割字符串

语法String[] split(String regex)

示例

java
String str = "apple,banana,orange";
String[] fruits = str.split(","); // ["apple", "banana", "orange"]
for (String fruit : fruits) {
    System.out.println(fruit);
}

split(String regex, int limit)

功能:根据正则表达式分割字符串,限制分割次数

语法String[] split(String regex, int limit)

示例

java
String str = "apple,banana,orange,grape";
String[] fruits = str.split(",", 2); // ["apple", "banana,orange,grape"]
for (String fruit : fruits) {
    System.out.println(fruit);
}

字符串大小写转换方法

toUpperCase()

功能:将字符串转换为大写

语法String toUpperCase()

示例

java
String str = "Hello, Java!";
String upperCase = str.toUpperCase(); // "HELLO, JAVA!"
System.out.println("大写结果: " + upperCase);

toLowerCase()

功能:将字符串转换为小写

语法String toLowerCase()

示例

java
String str = "Hello, Java!";
String lowerCase = str.toLowerCase(); // "hello, java!"
System.out.println("小写结果: " + lowerCase);

字符串修剪方法

trim()

功能:去除字符串前后的空白字符

语法String trim()

示例

java
String str = "  Hello, Java!  ";
String trimmed = str.trim(); // "Hello, Java!"
System.out.println("修剪结果: '" + trimmed + "'");

strip()

功能:去除字符串前后的空白字符(Java 11+)

语法String strip()

示例

java
String str = "  Hello, Java!  ";
String stripped = str.strip(); // "Hello, Java!"
System.out.println("修剪结果: '" + stripped + "'");

stripLeading()

功能:去除字符串开头的空白字符(Java 11+)

语法String stripLeading()

示例

java
String str = "  Hello, Java!  ";
String stripped = str.stripLeading(); // "Hello, Java!  "
System.out.println("修剪结果: '" + stripped + "'");

stripTrailing()

功能:去除字符串结尾的空白字符(Java 11+)

语法String stripTrailing()

示例

java
String str = "  Hello, Java!  ";
String stripped = str.stripTrailing(); // "  Hello, Java!"
System.out.println("修剪结果: '" + stripped + "'");

字符串判断方法

isEmpty()

功能:判断字符串是否为空

语法boolean isEmpty()

示例

java
String str1 = "";
String str2 = "Hello";
System.out.println("str1 是否为空: " + str1.isEmpty()); // true
System.out.println("str2 是否为空: " + str2.isEmpty()); // false

isBlank()

功能:判断字符串是否为空或只包含空白字符(Java 11+)

语法boolean isBlank()

示例

java
String str1 = "";
String str2 = "   ";
String str3 = "Hello";
System.out.println("str1 是否为空白: " + str1.isBlank()); // true
System.out.println("str2 是否为空白: " + str2.isBlank()); // true
System.out.println("str3 是否为空白: " + str3.isBlank()); // false

字符串其他方法

toCharArray()

功能:将字符串转换为字符数组

语法char[] toCharArray()

示例

java
String str = "Hello";
char[] charArray = str.toCharArray(); // ['H', 'e', 'l', 'l', 'o']
for (char c : charArray) {
    System.out.println(c);
}

getBytes()

功能:将字符串转换为字节数组

语法byte[] getBytes()

示例

java
String str = "Hello";
byte[] byteArray = str.getBytes(); // [72, 101, 108, 108, 111]
for (byte b : byteArray) {
    System.out.println(b);
}

valueOf(Object obj)

功能:将对象转换为字符串

语法static String valueOf(Object obj)

示例

java
int num = 123;
String str = String.valueOf(num); // "123"
System.out.println("转换结果: " + str);

boolean flag = true;
String str2 = String.valueOf(flag); // "true"
System.out.println("转换结果: " + str2);

format(String format, Object... args)

功能:使用指定的格式字符串和参数创建格式化的字符串

语法static String format(String format, Object... args)

示例

java
String name = "John";
int age = 30;
double salary = 5000.50;
String str = String.format("Name: %s, Age: %d, Salary: %.2f", name, age, salary);
System.out.println("格式化结果: " + str); // "Name: John, Age: 30, Salary: 5000.50"

join(CharSequence delimiter, CharSequence... elements)

功能:使用指定的分隔符连接多个字符串

语法static String join(CharSequence delimiter, CharSequence... elements)

示例

java
String[] fruits = {"apple", "banana", "orange"};
String str = String.join(", ", fruits); // "apple, banana, orange"
System.out.println("连接结果: " + str);

示例:字符串常用方法综合使用

示例 1:字符串处理

java
public class StringMethodsExample {
    public static void main(String[] args) {
        String str = "  Hello, Java World!  ";
        
        System.out.println("原始字符串: '" + str + "'");
        System.out.println("字符串长度: " + str.length());
        System.out.println("修剪后: '" + str.trim() + "'");
        System.out.println("大写: " + str.toUpperCase());
        System.out.println("小写: " + str.toLowerCase());
        System.out.println("是否包含 'Java': " + str.contains("Java"));
        System.out.println("是否以 'Hello' 开始: " + str.startsWith("Hello"));
        System.out.println("是否以 '!' 结束: " + str.endsWith("!"));
        System.out.println("字符 'o' 第一次出现的位置: " + str.indexOf('o'));
        System.out.println("字符 'o' 最后一次出现的位置: " + str.lastIndexOf('o'));
        System.out.println("子串 (7, 11): '" + str.substring(7, 11) + "'");
        System.out.println("替换 'Java' 为 'Python': " + str.replace("Java", "Python"));
        
        // 分割字符串
        String fruits = "apple,banana,orange,grape";
        String[] fruitArray = fruits.split(",");
        System.out.println("分割结果:");
        for (int i = 0; i < fruitArray.length; i++) {
            System.out.println("[" + i + "]: " + fruitArray[i]);
        }
        
        // 连接字符串
        String joined = String.join(" - ", fruitArray);
        System.out.println("连接结果: " + joined);
        
        // 格式化字符串
        String name = "Alice";
        int score = 95;
        String formatted = String.format("%s 的得分是 %d 分", name, score);
        System.out.println("格式化结果: " + formatted);
    }
}

示例 2:字符串验证

java
public class StringValidationExample {
    public static void main(String[] args) {
        String[] emails = {
            "user@example.com",
            "invalid-email",
            "user@",
            "@example.com"
        };
        
        for (String email : emails) {
            System.out.println("邮箱: " + email);
            System.out.println("是否有效: " + isValidEmail(email));
            System.out.println();
        }
    }
    
    public static boolean isValidEmail(String email) {
        if (email == null || email.isEmpty()) {
            return false;
        }
        
        // 检查是否包含 @ 符号
        if (!email.contains("@")) {
            return false;
        }
        
        // 检查 @ 符号的位置
        int atIndex = email.indexOf('@');
        if (atIndex == 0 || atIndex == email.length() - 1) {
            return false;
        }
        
        // 检查 @ 符号后是否包含 . 符号
        String domain = email.substring(atIndex + 1);
        if (!domain.contains(".")) {
            return false;
        }
        
        return true;
    }
}

示例 3:字符串反转

java
public class StringReverseExample {
    public static void main(String[] args) {
        String str = "Hello, Java!";
        System.out.println("原始字符串: " + str);
        System.out.println("反转后: " + reverseString(str));
    }
    
    public static String reverseString(String str) {
        // 方法 1:使用 StringBuilder
        StringBuilder sb = new StringBuilder(str);
        return sb.reverse().toString();
        
        // 方法 2:使用 charArray
        /*
        char[] charArray = str.toCharArray();
        int left = 0;
        int right = charArray.length - 1;
        
        while (left < right) {
            char temp = charArray[left];
            charArray[left] = charArray[right];
            charArray[right] = temp;
            left++;
            right--;
        }
        
        return new String(charArray);
        */
    }
}

常见问题

1. 字符串索引越界

症状StringIndexOutOfBoundsException

解决方案:在使用 charAt()substring() 等方法时,确保索引在有效范围内

示例

java
String str = "Hello";

// 错误:索引越界
// char c = str.charAt(10);

// 正确:检查索引范围
if (index >= 0 && index < str.length()) {
    char c = str.charAt(index);
}

2. 字符串比较错误

症状:使用 == 比较字符串内容

解决方案:使用 equals() 方法比较字符串内容

示例

java
String str1 = "Hello";
String str2 = new String("Hello");

// 错误:比较引用
// if (str1 == str2) {

// 正确:比较内容
if (str1.equals(str2)) {
    // 代码
}

3. 字符串拼接性能

症状:大量字符串拼接导致性能下降

解决方案:使用 StringBuilderStringBuffer

示例

java
// 错误:大量字符串拼接
String result = "";
for (int i = 0; i < 1000; i++) {
    result += i;
}

// 正确:使用 StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
    sb.append(i);
}
String result = sb.toString();

4. 字符串空值检查

症状NullPointerException

解决方案:在使用字符串方法前,检查字符串是否为 null

示例

java
String str = null;

// 错误:可能导致 NullPointerException
// if (str.equals("Hello")) {

// 正确:先检查 null
if (str != null && str.equals("Hello")) {
    // 代码
}

// 正确:常量放在前面
if ("Hello".equals(str)) {
    // 代码
}

最佳实践

  1. 使用合适的方法:根据具体需求选择合适的字符串方法

  2. 注意索引范围:使用索引相关方法时,确保索引在有效范围内

  3. 使用 equals() 比较:使用 equals() 方法比较字符串内容,而不是 == 运算符

  4. 使用 StringBuilder:对于大量字符串拼接操作,使用 StringBuilderStringBuffer

  5. 检查 null 值:在使用字符串方法前,检查字符串是否为 null

  6. 合理使用正则表达式:使用 replaceAll()split() 方法时,注意正则表达式的性能

  7. 了解方法的返回值:了解字符串方法的返回值,特别是不可变方法的返回值

  8. 使用 Java 11+ 的新方法:如果使用 Java 11 或更高版本,考虑使用 strip()isBlank() 等新方法

总结

Java 中的 String 类提供了丰富的方法用于操作字符串,包括:

  1. 长度方法length()

  2. 查找方法charAt(), indexOf(), lastIndexOf(), contains(), startsWith(), endsWith()

  3. 截取方法substring()

  4. 修改方法concat(), replace(), replaceAll(), replaceFirst()

  5. 分割方法split()

  6. 大小写转换方法toUpperCase(), toLowerCase()

  7. 修剪方法trim(), strip(), stripLeading(), stripTrailing()

  8. 判断方法isEmpty(), isBlank()

  9. 其他方法toCharArray(), getBytes(), valueOf(), format(), join()

通过合理使用这些方法,可以有效地处理和操作字符串,提高代码的可读性和性能。

© 2026 编程马·菜鸟教程 版权所有