字符串首尾字符检查:条件逻辑问题排查
两段代码的问题原因解析
第一段代码:首尾均为'x'时仅移除首字符
这段代码的逻辑顺序存在问题:当字符串首尾都是'x'时,第一个判断首字符为'x'的if会先触发,执行return语句后直接跳出方法,后续判断尾字符的if完全没有执行机会。
比如测试用例"xHix",第一个if满足条件后返回"Hix",末尾的'x'根本没被处理,导致测试不通过。
第二段代码:触发StringIndexOutOfBoundsException的原因
这段代码的异常主要来自两个场景:
- 输入长度为1的字符串"x"时:
第一个if的三个条件全部满足(长度>0、首字符是'x'、尾字符是'x'),接着执行str.substring(1, str.length()-1)。此时str.length()-1等于0,substring(1, 0)因为起始索引大于结束索引,直接抛出索引越界异常。 - 输入空字符串时:
虽然所有if都加了str.length()>0的判断,但如果逻辑意外走到调用str.substring(str.length()-1)的分支,str.length()-1会变成-1,调用substring(-1)必然触发异常。
另外提个优化点:代码里str.substring(0).startsWith("x")写法冗余,直接用str.startsWith("x")即可;str.substring(str.length()-1).endsWith("x")也可以简化为str.endsWith("x"),既简洁又避免多余的子串操作。
内容的提问来源于stack exchange,提问作者Jimmy Castillejo
相关产品推荐
相关产品推荐

