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

C#使用Contains判断数字包含关系返回结果异常问题

问题原因
  • 直接链式调用Console.ReadLine().Contains(Console.ReadLine())时,两个Console.ReadLine()会先后触发两次控制台读取,执行逻辑是:等待第一次输入完成回车后,才会执行到第二个ReadLine()等待第二次输入,很容易出现读取顺序和预期不符、读到空值/多余输入的问题,导致判断结果错误。
  • 你写的int数组版本逻辑存在本质错误:你创建了长度为10的int数组,仅将第一次输入的完整整数(比如输入5214会被转换为整数值5214)存入数组的第0位,数组剩余9位都是int类型默认值0。此时调用Contains判断,仅当第二个输入的整数和你存入的完整第一个数相等、或者输入0时才会返回true,完全没有实现“拆分数字位判断是否包含”的逻辑,自然达不到预期效果。
实现方案

如果不需要做额外数值计算,直接用字符串判断是最简单、兼容性最好的方案,支持多位数匹配(比如第一个输入5214、第二个输入21也能正确返回true),注意提前把两次输入存到变量里,不要重复调用ReadLine:

// 读取两次输入,自动去掉首尾多余空格,避免空引用报错
string firstNum = Console.ReadLine()?.Trim() ?? string.Empty;
string secondNum = Console.ReadLine()?.Trim() ?? string.Empty;
// 直接判断包含关系
Console.WriteLine(firstNum.Contains(secondNum));

如果必须通过数字拆分的方式实现(仅支持第二个输入为单个0-9数字的场景),可以参考以下代码:

int first = Convert.ToInt32(Console.ReadLine());
int second = Convert.ToInt32(Console.ReadLine());
List<int> digitList = new List<int>();

// 处理第一个数为0的特殊情况
if (first == 0)
{
    digitList.Add(0);
}
else
{
    // 逐位拆分数字
    while (first > 0)
    {
        digitList.Add(first % 10);
        first /= 10;
    }
}

Console.WriteLine(digitList.Contains(second));

注意:如果输入可能包含首尾空格,一定要在读取后调用Trim()处理,否则会因为多余字符导致匹配失败。如果需要支持第二个输入为多位数的包含判断,优先选字符串方案,不用额外处理连续数字位的匹配逻辑,代码更简洁不容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:15:19