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

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

一、引言

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

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

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

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

ini

复制代码

String str = "Hello"; // 优先从常量池拿,节省内存

new 关键字(每次新建对象) :

javascript

复制代码

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

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

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

go

复制代码

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

equals() vs ==:

equals()比内容(比如 "张三" 和 "张三" 相等)。

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

代码示例:

ini

复制代码

String a = "张三", b = new String("张三");

System.out.println(a.equals(b)); // true(内容一样)

System.out.println(a == b); // false(地址不同)

3. 查找与截取(找 substring )

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

ini

复制代码

int pos = "HelloWorld".indexOf("llo"); // 2(从0开始数)

substring() :截段子串(比如从第 3 个字符开始截)。

perl

复制代码

String sub = "HelloWorld".substring(3); // "loWorld"

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

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

1. 替换(改内容)

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

ini

复制代码

String newStr = "哈哈哈".replace("哈", "呵"); // "呵呵呵"

replaceFirst() :只换第一个(比如句子里第一个 "错误" 换成 "正确")。

ini

复制代码

String str = "错误错误错误";

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

2. 分割(拆成数组)

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

css

复制代码

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

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

toUpperCase() :全大写(比如 "hello"→"HELLO")。

toLowerCase() :全小写(比如 "WORLD"→"world")。

ini

复制代码

String upper = "hello".toUpperCase(); // "HELLO"

String lower = "WORLD".toLowerCase(); // "world"

4. 去空格(整理仪容)

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

ini

复制代码

String 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")。

javascript

复制代码

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)。

csharp

复制代码

System.out.println("".isEmpty()); // true

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

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

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

less

复制代码

String email = "user@example.com";

// 简单验证:包含@和.,且.在@后面

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,直接 "信手拈来"!

相关推荐

追爱之太傅哪里跑
365bet线上足球

追爱之太傅哪里跑

📅 11-27 👁️ 4688
爱要么是激情的化身,要么什么都不是
365bet线上足球

爱要么是激情的化身,要么什么都不是

📅 10-06 👁️ 9101
明月楼原文翻译、赏析、注释讲解
365bet网络娱乐

明月楼原文翻译、赏析、注释讲解

📅 08-26 👁️ 4245
棍的英文怎么说
365足球体育亚洲版

棍的英文怎么说

📅 08-22 👁️ 1815
眺的意思解释,拼音怎么读
365bet线上足球

眺的意思解释,拼音怎么读

📅 10-16 👁️ 4103
从零开始,教你如何使用皇室战争账号绑定工具,全方位攻略解析!
​禾加一笔,禾字加一笔有哪些字可以组成?
365足球体育亚洲版

​禾加一笔,禾字加一笔有哪些字可以组成?

📅 09-12 👁️ 3998
金主是什么意思(含义、造句)
365足球体育亚洲版

金主是什么意思(含义、造句)

📅 07-06 👁️ 4546
《底特律:变人》——探索AI觉醒与伦理挑战的科幻冒险之旅