You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中String.replace替换char与拼接成字符串替换的区别是什么

Java中两种String.replace调用的逻辑与执行差异

基于示例代码中的变量定义:字符串name = "fast and furious",字符s = 'f',两行标记代码的区别可以从实现逻辑、执行结果两个维度拆解:

line 1 代码的实现与结果

对应代码:System.out.println(name.replace(s, '\0'));

  • 调用的是String类的单字符重载方法:public String replace(char oldChar, char newChar)
  • 实现逻辑:从头到尾逐字符遍历原字符串,只要字符和传入的旧字符oldChar完全匹配,就将该位置直接替换为新字符newChar;整个过程是逐字符位操作,生成的新字符串长度和原字符串完全一致。
  • 对应参数取值:旧字符是变量s即'f',新字符是Unicode空字符'\0'
  • 执行结果:原字符串中所有出现'f'的位置被替换为空字符,最终输出内容为"\0ast and \0urious"——打印时不可见的空字符会占住原f的位置,字符串总长度和原串保持相同。

line 2 代码的实现与结果

对应代码:System.out.println(name.replace("" + s, ""));

  • 调用的是String类的字符序列重载方法:public String replace(CharSequence target, CharSequence replacement)
  • 前置类型转换:"" + s会将单字符s拼接为内容是"f"的字符串,作为待匹配的目标子串;替换值是空字符串""。
  • 实现逻辑:在原字符串中查找所有和目标序列完全匹配的连续子串,直接把匹配到的子串替换为指定的新序列;整个过程是基于子串匹配的替换逻辑,最终字符串长度会根据替换内容的长度动态变化。
  • 执行结果:原字符串中所有值为"f"的连续子串(因为目标是单字符,匹配位置和line1完全重合)被直接移除,最终输出内容为"ast and urious",字符串总长度比原串短2个字符。

两类调用的核心差异

  • 操作本质不同:char参数版是固定长度的字符位替换,不会改变字符串总长度;CharSequence参数版是可变长度的子串匹配替换,最终长度由替换内容的长度决定。
  • 适用场景不同:char参数版仅支持单字符的等值替换;CharSequence参数版支持任意长度的连续子串匹配替换,灵活性更高。
  • 输出效果不同:line1的输出存在不可见的空字符占位,长度和原串一致;line2的输出是剔除目标字符后的正常可读字符串,长度更短。

内容的提问来源于stack exchange,提问作者noobmaster69

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 16:45:00