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
相关产品推荐
相关产品推荐

