一、引言
在 Java 世界里,String
类就像一个万能工具箱,几乎每个项目都会用到它。从简单的字符串拼接,到复杂的文本处理,String
提供的方法能解决大部分字符串操作需求。本文将用大白话 + 代码示例,带你玩转String
的常用方法,让你在开发中 "字符串操作不踩坑"。
二、基础操作:字符串的 "生老病死"
1. 创建字符串(两种姿势)
-
直接赋值(常量池优化) :
iniString str = "Hello"; // 优先从常量池拿,节省内存
-
new 关键字(每次新建对象) :
javascriptString str = new String("Hello"); // 不管有没有,都new一个,慎用!
2. 长度与比较(知己知彼)
-
length()
:看字符串有多长(像量身高)。goint len = "abc".length(); // 3
-
equals()
vs==
:-
equals()
比内容(比如 "张三" 和 "张三" 相等)。 -
==
比内存地址(new 出来的即使内容一样,地址不同,==
就不等)。
代码示例:
iniString a = "张三", b = new String("张三"); System.out.println(a.equals(b)); // true(内容一样) System.out.println(a == b); // false(地址不同)
-
3. 查找与截取(找 substring )
-
indexOf()
:找子串第一次出现的位置(像找单词在句子中的位置)。iniint pos = "HelloWorld".indexOf("llo"); // 2(从0开始数)
-
substring()
:截段子串(比如从第 3 个字符开始截)。perlString sub = "HelloWorld".substring(3); // "loWorld" String sub2 = "HelloWorld".substring(3, 5); // "lo"(左闭右开,不包含第5位)
三、进阶操作:替换、分割、转换
1. 替换(改内容)
-
replace()
:把所有 "旧内容" 换成 "新内容"(比如把 "哈" 换成 "呵")。iniString newStr = "哈哈哈".replace("哈", "呵"); // "呵呵呵"
-
replaceFirst()
:只换第一个(比如句子里第一个 "错误" 换成 "正确")。iniString str = "错误错误错误"; String fixed = str.replaceFirst("错误", "正确"); // "正确错误错误"
2. 分割(拆成数组)
-
split()
:按分隔符拆字符串(比如按逗号拆 CSV 数据)。cssString[] parts = "a,b,c".split(","); // 得到 ["a","b","c"]
3. 大小写转换(变模样)
-
toUpperCase()
:全大写(比如 "hello"→"HELLO")。 -
toLowerCase()
:全小写(比如 "WORLD"→"world")。iniString upper = "hello".toUpperCase(); // "HELLO" String lower = "WORLD".toLowerCase(); // "world"
4. 去空格(整理仪容)
-
trim()
:去掉前后空格(比如用户输入的 "姓名"→"姓名")。iniString trimmed = " Java ".trim(); // "Java"
四、特殊操作:不可变性与性能优化
1. 不可变性(String 的 "脾气")
String
一旦创建,内容不能改!所有修改方法(如replace
、substring
)都会返回新字符串 ,原字符串不变。这就是为啥拼接大量字符串时,要用StringBuilder
(可变,省内存):
ini
// 反面教材:每次+都会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")。javascriptString numStr = String.valueOf(123); // "123" String nullStr = String.valueOf(null); // "null"(注意:传null时会返回"null"字符串)
-
isEmpty()
vsisBlank()
(Java 11+) :-
isEmpty()
:看是不是空字符串(长度 0,比如""
→true)。 -
isBlank()
:看是不是空白(长度 0 或全是空格,比如" "
→true)。
csharpSystem.out.println("".isEmpty()); // true System.out.println(" ".isBlank()); // true(Java 11及以上可用)
-
五、实际场景:这些方法怎么用?
1. 验证用户输入(比如邮箱)
less
String email = "[email protected]";
// 简单验证:包含@和.,且.在@后面
if (email.contains("@") && email.indexOf(".") > email.indexOf("@")) {
System.out.println("邮箱格式对了!");
}
2. 日志解析(提取关键信息)
ini
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 数据(分割行和列)
ini
String csvLine = "Alice,25,New York";
String[] columns = csvLine.split(",");
for (String col : columns) {
System.out.println(col); // 依次输出Alice、25、New York
}
六、面试官为啥总问 String?
- 基础中的基础:String 是 Java 最常用类,考察你对字符串操作的熟悉度(比如会不会用 split、replace,知不知道不可变性)。
- 性能优化:比如拼接字符串用 StringBuilder 还是 String,这能看出你对内存和性能的理解。
- 源码理解 :深入的话,还会问 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,直接 "信手拈来"!