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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:14:52