如何判断字符串中句号(.)与方括号([)哪个最先出现?
优化判断字符串中句号与方括号出现顺序的Java实现
你的代码能实现基础判断,但存在冗余遍历和边界场景缺失的问题,以下是更简洁高效的优化方案:
原代码的问题点
- 重复调用
contains和indexOf:每个字符需要遍历两次字符串,浪费性能 - 初始值设置不合理:用0初始化索引,若其中一个字符不存在,会触发错误的判断逻辑
- 未处理边界场景:仅覆盖了两种字符都存在的情况,没考虑仅存在一种、两种都不存在的情况
优化后的代码
public static void main(String[] args) { String str = "timedLeg[0].service.carriers[0].ref"; checkString(str); } private static void checkString(String str) { int bracketIndex = str.indexOf('['); int periodIndex = str.indexOf('.'); // 两种字符都存在,比较出现顺序 if (bracketIndex != -1 && periodIndex != -1) { System.out.println(periodIndex < bracketIndex ? "句号先出现" : "方括号先出现"); } // 仅存在句号 else if (periodIndex != -1) { System.out.println("仅存在句号"); } // 仅存在方括号 else if (bracketIndex != -1) { System.out.println("仅存在方括号"); } // 两种字符都不存在 else { System.out.println("字符串中既没有句号也没有方括号"); } }
优化说明
- 减少字符串遍历:直接用
indexOf的返回值判断字符是否存在(返回-1表示不存在),避免了contains的额外遍历,每个字符只需要遍历一次字符串 - 修正索引初始值:用-1表示未找到字符的状态,逻辑判断更准确
- 覆盖所有场景:补充了仅存在一种字符、两种都不存在的处理,逻辑更完整
- 简化代码逻辑:使用三目运算符简化顺序判断,分支结构更清晰易读
内容的提问来源于stack exchange,提问作者Piya
相关产品推荐
相关产品推荐

