今天聊聊Java 中 String 的常见方法

107 阅读4分钟

一、引言

在 Java 世界里,String类就像一个万能工具箱,几乎每个项目都会用到它。从简单的字符串拼接,到复杂的文本处理,String提供的方法能解决大部分字符串操作需求。本文将用大白话 + 代码示例,带你玩转String的常用方法,让你在开发中 “字符串操作不踩坑”。

二、基础操作:字符串的 “生老病死”

1. 创建字符串(两种姿势)

  • 直接赋值(常量池优化)

    String str = "Hello"; // 优先从常量池拿,节省内存
    
  • new 关键字(每次新建对象)

    String str = new String("Hello"); // 不管有没有,都new一个,慎用!
    

2. 长度与比较(知己知彼)

  • length() :看字符串有多长(像量身高)。

    int len = "abc".length(); // 3
    
  • equals() vs ==

    • equals()比内容(比如 “张三” 和 “张三” 相等)。

    • ==比内存地址(new 出来的即使内容一样,地址不同,==就不等)。
      代码示例

    String a = "张三", b = new String("张三");
    System.out.println(a.equals(b)); // true(内容一样)
    System.out.println(a == b); // false(地址不同)
    

3. 查找与截取(找 substring )

  • indexOf() :找子串第一次出现的位置(像找单词在句子中的位置)。

    int pos = "HelloWorld".indexOf("llo"); // 2(从0开始数)
    
  • substring() :截段子串(比如从第 3 个字符开始截)。

    String sub = "HelloWorld".substring(3); // "loWorld"
    String sub2 = "HelloWorld".substring(3, 5); // "lo"(左闭右开,不包含第5位)
    

三、进阶操作:替换、分割、转换

1. 替换(改内容)

  • replace() :把所有 “旧内容” 换成 “新内容”(比如把 “哈” 换成 “呵”)。

    String newStr = "哈哈哈".replace("哈", "呵"); // "呵呵呵"
    
  • replaceFirst() :只换第一个(比如句子里第一个 “错误” 换成 “正确”)。

    String str = "错误错误错误";
    String fixed = str.replaceFirst("错误", "正确"); // "正确错误错误"
    

2. 分割(拆成数组)

  • split() :按分隔符拆字符串(比如按逗号拆 CSV 数据)。

    String[] parts = "a,b,c".split(","); // 得到 ["a","b","c"]
    

3. 大小写转换(变模样)

  • toUpperCase() :全大写(比如 “hello”→“HELLO”)。

  • toLowerCase() :全小写(比如 “WORLD”→“world”)。

    String upper = "hello".toUpperCase(); // "HELLO"
    String lower = "WORLD".toLowerCase(); // "world"
    

4. 去空格(整理仪容)

  • trim() :去掉前后空格(比如用户输入的 “姓名”→“姓名”)。

    String trimmed = "  Java  ".trim(); // "Java"
    

四、特殊操作:不可变性与性能优化

1. 不可变性(String 的 “脾气”)

String一旦创建,内容不能改!所有修改方法(如replacesubstring)都会返回新字符串,原字符串不变。这就是为啥拼接大量字符串时,要用StringBuilder(可变,省内存):

// 反面教材:每次+都会new新String,慢!
String s = "";
for (int i=0; i<1000; i++) {
    s += i; // 性能差!
}

// 正面教材:用StringBuilder,一次到位
StringBuilder sb = new StringBuilder();
for (int i=0; i<1000; i++) {
    sb.append(i); // 快!
}
String result = sb.toString();

2. 常用工具方法(偷懒必备)

  • valueOf() :把任何东西转成字符串(比如数字 123→“123”,null→“null”)。

    String numStr = String.valueOf(123); // "123"
    String nullStr = String.valueOf(null); // "null"(注意:传null时会返回"null"字符串)
    
  • isEmpty() vs isBlank()(Java 11+)

    • isEmpty():看是不是空字符串(长度 0,比如""→true)。

    • isBlank():看是不是空白(长度 0 或全是空格,比如" "→true)。

    System.out.println("".isEmpty()); // true
    System.out.println("  ".isBlank()); // true(Java 11及以上可用)
    

五、实际场景:这些方法怎么用?

1. 验证用户输入(比如邮箱)

String email = "user@example.com";
// 简单验证:包含@和.,且.在@后面
if (email.contains("@") && email.indexOf(".") > email.indexOf("@")) {
    System.out.println("邮箱格式对了!");
}

2. 日志解析(提取关键信息)

String log = "User [id=123, name=Tom] logged in";
// 提取用户ID
int start = log.indexOf("id=") + 3; // 找到"id="后面的位置
int end = log.indexOf(",", start); // 找第一个逗号的位置
String userId = log.substring(start, end); // "123"
System.out.println("用户ID:" + userId);

3. 处理 CSV 数据(分割行和列)

String csvLine = "Alice,25,New York";
String[] columns = csvLine.split(",");
for (String col : columns) {
    System.out.println(col); // 依次输出Alice、25、New York
}

六、面试官为啥总问 String?

  1. 基础中的基础:String 是 Java 最常用类,考察你对字符串操作的熟悉度(比如会不会用 split、replace,知不知道不可变性)。
  2. 性能优化:比如拼接字符串用 StringBuilder 还是 String,这能看出你对内存和性能的理解。
  3. 源码理解:深入的话,还会问 String 的常量池、hashCode 计算(每个字符的 ASCII 乘 31 累加,比如 "abc" 的 hash 是 9731²+9831+99),这些是底层原理,体现基本功。

七、总结:String 方法速查表

方法作用示例
length()长度"abc".length() → 3
equals()内容比较"a".equals("a") → true
indexOf()找子串位置"Hello".indexOf("ll") → 2
substring()截段子串"Hello".substring(1,3) → "el"
replace()替换内容"abc".replace("a","x") → "xbc"
split()分割字符串"a,b".split(",") → ["a","b"]
toUpperCase()转大写"hello".toUpperCase() → "HELLO"
trim()去前后空格" abc ".trim() → "abc"

掌握这些方法,字符串操作就像搭积木一样简单。下次写代码遇到字符串处理,不用再查 API,直接 “信手拈来”!