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

未知长度字符串中如何验证倒数第三个字符为指定值?

问题翻译与需求说明

我需要处理格式为123*7?8的字符串:

  • *代表长度不超过3位的任意数字或空值
  • ?代表任意数字
    现在要验证字符串的倒数第三个字符为'7',同时满足开头是123、结尾是8,且对应的数字能被23整除。以下是我写的代码,但不知道怎么实现倒数第三个字符的验证:
for (int i = 1000000; i < 1000000000; i++)
{
    string s = Convert.ToString(i);

    // How can I check that 3rd character from the end is '7'?
    if (s[0] == '1' && s[1] == '2' && s[2] == '3' && s.Last() == '8')
    {
        if (i % 23 == 0)
        {
            Console.WriteLine(s);
        }
    }
}

解决方法

要判断字符串倒数第三个字符为'7',可以用两种方式实现:

1. 兼容所有C#版本的写法

通过字符串长度计算索引:s[s.Length - 3] == '7'。同时先判断字符串长度至少为6(符合格式的最短字符串是123708,共6位),避免索引越界。

修改后的代码:

for (int i = 123000; i < 1000000000; i++) // 调整起点覆盖6位有效数字
{
    string s = Convert.ToString(i);

    // 先判断长度符合要求,再检查各条件
    if (s.Length >= 6 
        && s[0] == '1' && s[1] == '2' && s[2] == '3' 
        && s[s.Length - 3] == '7' // 核心:倒数第三个字符为'7'
        && s.Last() == '8')
    {
        if (i % 23 == 0)
        {
            Console.WriteLine(s);
        }
    }
}

2. C# 8.0及以上版本的简化写法

使用C# 8.0引入的索引运算符^,^3直接代表倒数第三个元素的索引,代码更直观:

for (int i = 123000; i < 1000000000; i++)
{
    string s = Convert.ToString(i);

    if (s.Length >= 6 
        && s[0] == '1' && s[1] == '2' && s[2] == '3' 
        && s[^3] == '7' // 倒数第三个字符
        && s[^1] == '8') // 用^1代替Last(),语义更统一
    {
        if (i % 23 == 0)
        {
            Console.WriteLine(s);
        }
    }
}

额外优化说明

  • 原循环起点1000000会漏掉6位的有效数字(比如123708),调整为123000后可覆盖所有可能的有效长度(6-9位)。
  • 先判断字符串长度>=6,可以避免后续索引访问时出现IndexOutOfRangeException。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:25:10