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
相关产品推荐
相关产品推荐

