You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何从字符串末尾反向查找指定运算符的正确索引?

问题原因
  • 核心逻辑错误:遍历起始下标取值错误。String.indexOf() 方法返回的是目标字符在字符串中首次出现的正向索引,而非你想要的字符串末尾起始位置。以测试用例"92021+58-035/235"为例,末尾字符是5,首次出现的索引是2,因此循环直接从索引2开始向前查找,自然会先匹配到位置更靠前的+,根本不会遍历到靠后的/所在位置。
  • 仅当末尾字符在整个字符串中唯一时,indexOf返回的索引刚好等于字符串最后一位的索引,此时逻辑恰好生效,这就是你修改末尾字符为唯一值后结果正确的原因。
修复方案

直接将遍历起始下标设置为字符串最后一位的索引sc.length() - 1即可,不需要调用indexOf做额外计算:

public class ForCalculator {
    public int checkStringFromLast(String sc){
        // 直接从字符串最后一位开始遍历
        int i = sc.length() - 1;
        while(i >= 0){
            if(sc.charAt(i)=='x'||sc.charAt(i)=='+'||sc.charAt(i)=='-'||sc.charAt(i)=='/'){
                System.out.println("returning "+i);
                return i;
            }
            i--;
        }
        // 若未找到运算符,可根据业务需求调整返回值,返回-1更符合未匹配的通用逻辑
        return -1;
    }
    
    public static void main(String[] args) {
        ForCalculator obj = new ForCalculator();
        String str = "92021+58-035/235";
        // 输出结果为11,即/的索引,符合预期
        System.out.println(obj.checkStringFromLast(str));
    }
}

内容的提问来源于stack exchange,提问作者Gaurav Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:06:02