实现StringBuilder的replaceAll功能

由于项目需求要使用StringBuilder类,发现StringBuilder类只有replace方法,却没有replaceAll方法,如果把StringBuilder转成String再去调用String的replaceAll方法执行速度实在过慢,于是就需要自己封装一个StringBuilder的replaceAll方法。

之前写的实现方法有点无病呻吟之感,感谢评论的同学提出意见,现做了完善的修改。

/**
	 * 实现StringBuilder的replaceAll
	 * 
	 * @param stb
	 * @param oldStr 被替换的字符串
	 * @param newStr 替换oldStr
	 * @return
	 */
	public static StringBuilder replaceAll(StringBuilder stb, String oldStr, String newStr) {
		if (stb == null || oldStr == null || newStr == null || stb.length() == 0 || oldStr.length() == 0)
			return stb;
		int index = stb.indexOf(oldStr);
		if (index > -1 && !oldStr.equals(newStr)) {
			int lastIndex = 0;
			while (index > -1) {
				stb.replace(index, index + oldStr.length(), newStr);
				lastIndex = index + newStr.length(
`replace` 和 `replaceAll` 都是用于替换字符串中特定字符或模式的 Java 字符串方法,但在使用场景上存在一些关键区别。 ### replace `replace` 方法接收两个参数: 1. **查找字符串** (`charSequence`): 这是要从原始字符串中查找并替换的文本。 2. **替换字符串** (`replacement`) : 这是要将找到的所有匹配实例替换为的新文本。 这个方法会返回一个新的字符串,其中所有与给定的查找字符串相匹配的实例都被替换为提供的替换字符串。例如: ```java String original = "hello world"; String replaced = original.replace('l', 'x'); // 结果将是 "hexxo worxd" ``` 注意,`replace` 方法不会直接修改原字符串,而是生成一个新的结果字符串。这意味着原来的字符串保持不变。 ### replaceAll `replaceAll` 方法也接受一个参数: 1. **正则表达式模式** (`pattern`) : 使用正则表达式的模式来匹配需要替换的字符序列。 这个方法会遍历整个输入字符串,并用替换字符串替换掉与模式匹配的所有部分。由于它是基于正则表达式的,因此比 `replace` 更加强大、灵活和复杂。它适用于更复杂的模式匹配任务。 例如: ```java String original = "hello world world"; String allReplaced = original.replaceAll("world", "planet"); // 结果将是 "hello planet planet" ``` `replaceAll` 方法同样会在处理完成后返回一个新的字符串,而不是修改原有的字符串。 ### 主要区别总结 - **灵活性**:`replace` 更简单直接,而 `replaceAll` 则可以利用正则表达式来进行更复杂的模式匹配。 - **是否修改原有字符串**:`replace` 通常不会直接修改原始字符串(除非通过 `StringBuilder` 等数据结构),而 `replaceAll` 总是创建新的字符串。 - **性能考虑**:对于简单的替换任务,`replace` 可能更快;而对于复杂的模式匹配,则 `replaceAll` 而言更为高效。 --- ##
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值