C#查找字符串最高索引整数遇问题:IndexOf未取最后一位
问题原因与快速修复
问题根源
你的代码逻辑是先找出每个数字字符在字符串中首次出现的索引,再取这些索引的最大值。但IndexOf(d)只会返回数字d第一次出现的位置——比如示例字符串里的"5",首次出现索引是5,最后一次是16,但IndexOf("5")只会返回5。所以最终取到的最大值并不是整个字符串中最后一个数字的位置。
快速修复方案
方案1:改用LastIndexOf获取数字最后出现的索引
把IndexOf替换成LastIndexOf,这样每个数字会返回它在字符串中最后一次出现的位置,再取最大值就能得到目标索引:
String[] digits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; String line = "four95qvkvveight5"; int index_digit2 = digits .Where(d => line.Contains(d)) .Max(d => line.LastIndexOf(d));
运行这段代码,示例中的index_digit2会返回16,符合预期。
方案2:直接从后往前遍历字符串(更高效)
如果只是要找最后一个数字的索引,不需要遍历整个数字数组,直接从字符串末尾开始查找第一个数字字符,性能更优:
String line = "four95qvkvveight5"; int index_digit2 = -1; for (int i = line.Length - 1; i >= 0; i--) { if (char.IsDigit(line[i])) { index_digit2 = i; break; } }
这种方法逻辑直观,避免了不必要的数组遍历,适合处理大量行数据的场景。
内容的提问来源于stack exchange,提问作者user26430853
相关产品推荐
相关产品推荐

