stringbuilder没有indexof()方法,需用tostring()转为string后调用indexof()或lastindexof()查找子串,返回索引或-1;性能敏感时可手动遍历charat(),但通常不推荐。

StringBuilder 本身没有直接提供类似 indexOf() 的方法,但你可以通过调用其 toString() 方法转成 String,再使用 String 的 indexOf() 或 lastIndexOf() 来查找子串位置。
用 toString() + indexOf() 获取首次出现位置
这是最常用、最直观的方式。注意:返回值是子串在字符串中的索引(从 0 开始),若未找到则返回 -1。
- 语法示例:
int index = sb.toString().indexOf("abc"); - 适用于查找第一次匹配的位置
- 如果 StringBuilder 很大,频繁调用
toString()会产生临时 String 对象,可能影响性能(但多数场景可忽略)
用 toString() + lastIndexOf() 获取最后一次出现位置
当需要找末次匹配时,用 lastIndexOf() 更合适:
- 示例:
int lastIndex = sb.toString().lastIndexOf("xyz"); - 同样返回索引或 -1
- 内部实现会从末尾向前扫描,适合已知目标靠后的情况
想避免创建新 String?手动遍历(较少用)
如果对性能极度敏感(如高频、超长文本处理),可基于 StringBuilder.charAt(i) 手写子串匹配逻辑:
- 获取长度:
int len = sb.length(); - 外层循环控制起始位置,内层比对字符
- 需注意边界判断(防止越界),代码更冗长,易出错
- 除非有明确压测证据表明
toString()成为瓶颈,否则不推荐
注意:不能直接用 sb.indexOf() —— 该方法不存在
别混淆 StringBuilder 和 String。StringBuilder 类中没有 indexOf(String) 方法,编译会报错。常见错误写法:
-
❌ 错误:
sb.indexOf("test")→ 编译失败 -
✅ 正确:
sb.toString().indexOf("test")
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











