Java字符串替换的三种方法各有特点:`replace`进行字面量全量替换,性能最佳;`replaceFirst`基于正则只替换首次匹配;`replaceAll`基于正则全局替换。根据场景选择,固定替换用`replace`,正则匹配用`replaceAll`或`replaceFirst`,注意方法参数差异。
Java字符串替换技巧详解
作者:技术拾光
时间:2026-06-16
浏览:80
Ja va 的 `String` 类里藏着三个替换字符串的“老伙计”——`replace`、`replaceFirst` 和 `replaceAll`。别看它们名字长得像,用起来差别还挺大。今天就把这三位的底细扒清楚:它们各自怎么干活,适合什么场景,以及踩过哪些坑。搞明白了,以后字符串替换这块基本就不会翻车。
### 先说说 `replace`:无脑替换,全盘接收
它的玩法最直接——指定一个旧字符(或字符串),然后所有长得一样的字符都会被换成新的。说白了就是“撞见一个换一个,一个都不放过”。
比如这样:
```ja va
String str = "hello world";
str.replace("l", "L"); // 结果:heLLo worLd
```
示例代码截图:
执行结果也很清楚:所有匹配项全被替换。
### 接着看 `replaceFirst`:只换第一个,点到为止
这个方法是基于正则表达式匹配的,但注意它只替换**第一次**出现的那一处。如果你只想处理目标字符串中第一个符合条件的子串,后面的不管,就用它。
示例代码:
运行之后你会发现,只有第一个匹配项被换掉了,剩下的纹丝不动。
### 最后是 `replaceAll`:正则全局扫描,一个不留
和 `replaceFirst` 类似,它也依赖正则表达式,但它是全量匹配——所有符合条件的子串都会被替换。正因为用到了正则,所以性能开销比 `replace` 大一些,但灵活度也最高。
示例代码:
这三者的差异用一句话概括就是:`replace` 是“字面对字面,全换”;`replaceFirst` 是“正则匹配,只动第一次”;`replaceAll` 是“正则匹配,全部干掉”。
### 跑个完整例子验证一下
在命令行里编译运行这段代码,看看实际输出:
打开终端,执行编译:
运行应用:
最终控制台输出的结果是这样的:
从结果可以清晰地看到:`replace` 把所有 `l` 都变成了大写 `L`;`replaceFirst` 只把第一个 `l` 换掉;`replaceAll` 同样把所有匹配正则的子串都替换掉(如果正则是字面量,效果和 `replace` 几乎一样,但底层机制不同)。
### 几个要记住的关键点
- 如果只是想替换某个固定字符或字符串,**优先用 `replace`**,它不会走正则引擎,性能更好。
- 如果需要用正则模式来匹配,比如替换所有数字、所有空白字符,那就用 `replaceAll`。
- `replaceFirst` 适合“只改第一个”的场景,比如规范化输入时只修复首处错误。
另外,千万别搞混方法签名——`replace` 参数可以是 `char` 或 `CharSequence`,而 `replaceFirst` 和 `replaceAll` 第一个参数必须是正则表达式字符串。如果给 `replaceAll` 传了一个普通字符串,它也会被当作正则解析,可能会出意外(比如 `.` 会匹配任意字符)。建议平时多留个心眼,测试一下边界情况。
字符串操作看似基础,但用好了能省下不少调试时间。这三种方法各有所长,选对工具,事半功倍。
执行结果也很清楚:所有匹配项全被替换。
### 接着看 `replaceFirst`:只换第一个,点到为止
这个方法是基于正则表达式匹配的,但注意它只替换**第一次**出现的那一处。如果你只想处理目标字符串中第一个符合条件的子串,后面的不管,就用它。
示例代码:
运行之后你会发现,只有第一个匹配项被换掉了,剩下的纹丝不动。
### 最后是 `replaceAll`:正则全局扫描,一个不留
和 `replaceFirst` 类似,它也依赖正则表达式,但它是全量匹配——所有符合条件的子串都会被替换。正因为用到了正则,所以性能开销比 `replace` 大一些,但灵活度也最高。
示例代码:
这三者的差异用一句话概括就是:`replace` 是“字面对字面,全换”;`replaceFirst` 是“正则匹配,只动第一次”;`replaceAll` 是“正则匹配,全部干掉”。
### 跑个完整例子验证一下
在命令行里编译运行这段代码,看看实际输出:
打开终端,执行编译:
运行应用:
最终控制台输出的结果是这样的:
从结果可以清晰地看到:`replace` 把所有 `l` 都变成了大写 `L`;`replaceFirst` 只把第一个 `l` 换掉;`replaceAll` 同样把所有匹配正则的子串都替换掉(如果正则是字面量,效果和 `replace` 几乎一样,但底层机制不同)。
### 几个要记住的关键点
- 如果只是想替换某个固定字符或字符串,**优先用 `replace`**,它不会走正则引擎,性能更好。
- 如果需要用正则模式来匹配,比如替换所有数字、所有空白字符,那就用 `replaceAll`。
- `replaceFirst` 适合“只改第一个”的场景,比如规范化输入时只修复首处错误。
另外,千万别搞混方法签名——`replace` 参数可以是 `char` 或 `CharSequence`,而 `replaceFirst` 和 `replaceAll` 第一个参数必须是正则表达式字符串。如果给 `replaceAll` 传了一个普通字符串,它也会被当作正则解析,可能会出意外(比如 `.` 会匹配任意字符)。建议平时多留个心眼,测试一下边界情况。
字符串操作看似基础,但用好了能省下不少调试时间。这三种方法各有所长,选对工具,事半功倍。实用工具推荐
电子包浆
使用 ›绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
图片压缩
使用 ›选择画质和输出格式,预览压缩前后的大小。
相关文章